首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Athena插入查询错误"[Simba][JDBC](10940)无效参数索引:1。

Athena插入查询错误"[Simba][JDBC](10940)无效参数索引:1。
EN

Stack Overflow用户
提问于 2022-11-03 05:58:04
回答 1查看 42关注 0票数 0

我一直试图用预先准备好的语句从我的机器导出到Athena DB。查询给定

代码语言:javascript
复制
"INSERT INTO "default"."bjhfhj" VALUES ('?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?','?')"

代码:

代码语言:javascript
复制
preparedStatement= dbConnection.prepareStatement(insertQuery.toString());
preparedStatement.setString(1, "<colValue>");

对于这段代码,我得到了错误"[Simba][JDBC](10940) Invalid parameter index: 1."

堆栈跟踪:

代码语言:javascript
复制
com.simba.athena.exceptions.ExceptionConverter.toSQLException(Unknown Source)
com.simba.athena.jdbc.common.SPreparedStatement.checkValidParameterIndex(Unknown Source)
com.simba.athena.jdbc.common.SPreparedStatement.setString(Unknown Source)

精确的java代码:

代码语言:javascript
复制
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class AmazonAthena {
    public static void main(String[] args) {
        String connection_URL = "jdbc:awsathena://athena.<AWSREGION>.amazonaws.com:443;User=<ACCESS_KEY>;Password=<SECRET_KEY>;S3OutputLocation=<S3_OUTPUT_LOCATION>;";
        Connection connection = null;
        try {
            Class.forName("com.simba.athena.jdbc.Driver");
            connection = DriverManager.getConnection(connection_URL);
            PreparedStatement preparedStatement= connection.prepareStatement("INSERT INTO \"dataprepdb\".\"bjhfhj\" VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            String value = "dhv";
            for (int i=0;i<20;i++){
                preparedStatement.setString(i+1,value+i);
            }
            preparedStatement.executeUpdate();

        } catch (SQLException | ClassNotFoundException e) {
            System.out.printf("error");
            throw new RuntimeException(e);
        }
    }
}

我怎么才能解决这个问题?

EN

回答 1

Stack Overflow用户

发布于 2022-11-03 06:27:08

您的SQL错误。那个?是占位符,不要用‘’包裹。

这是正确的:

代码语言:javascript
复制
"INSERT INTO default.bjhfhj VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"

您应该知道如何为preparedStatement使用占位符。

====

试试这个:

  1. 像这样修改sql,只插入一个字段,并确保安装的值符合字段所需的类型。

“插入t_user (id)值(?)"

  1. 使用此方法设置值。

query.setParameter(0,someVarId);

如果不管用,我也帮不了你。对不起。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74298635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档