【问题标题】:SQL statement too long in jdbcjdbc中的SQL语句太长
【发布时间】:2017-08-08 14:35:01
【问题描述】:

我正在 SAP HANA 中进行批量插入,下面是我的代码:

for (int i = 1; i <= ITERATION_MAX; i++) {

        String arraylist=Arrays.toString(listofdata.get(i).get_arraylist.replace("[","").replace("]",""));
        id=listofdata.get(i).get_id();
        name= listofdata.get(i).get_name();
        place=listofdata.get(i).get_place();
        year= listofdata.get(i).get_year();
        day=listofdata.get(i).get_day();
        rollno=   listofdata.get(i).get_rollno();
        main_subject= listofdata.get(i).get_main_subject();
        elective= listofdata.get(i).get_elective();
        Statement stmt = conn.createStatement();
        String sql="INSERT INTO SCHEMA.TABLE values("+

           +name+","
            place+","
            year+day+","
            rollno+","
            main_subject+","
            elective"+","
            "ARRAY("+arraylist+")" ;


        stmt.addbatch(sql);
    }
    stmt.executeBatch();
    stmt.close();
    conn.commit();
    conn.close();

代码工作正常,但有时会失败并显示错误

sql statement too long.

因此,我的整个批次(10000 行)都失败了,我不想面对。如果我能知道我可以使用的最大 SQL 语句长度就好了。

有类似的东西

if (sql.length()<max_length){
 stmt.addbatch(sql);
} 
else{
}

但我想确保这是最大长度。任何帮助表示赞赏

【问题讨论】:

  • 使用准备好的语句。始终指定列的名称,而不是依赖它们的顺序。 docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
  • 批量插入properly
  • 您是否尝试过查询 M_SYSTEM_LIMITS 2GB 似乎是查询的默认最大大小。
  • @JBNizet 我不能在这里使用准备好的语句,因为存在 HANA 数组类型冲突所以我需要单独创建的语句
  • @Lars.Br 你能帮我吗?

标签: java database jdbc hana


【解决方案1】:

正如@BevynQ 提到的,SQL 语句的当前内存限制为 2GB。 所以你可以检查一下,我想。 更实用的方法可能是按照经验法则进行,例如,一次插入 100 次。

一般来说,目前我不建议在 HANA 中使用 ARRAY 数据类型(请参阅其他关于此的讨论 - 它确实没有得到很好的支持,而且在我看来远不是一流的数据类型)。

【讨论】:

  • 是的,您是正确的,感谢您的澄清
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-31
  • 2013-08-18
相关资源
最近更新 更多