【发布时间】: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 你能帮我吗?