我正在执行以下代码,以便批量执行插入。
String idlist=1,2,3;
PreparedStatement stmt = conn
.prepareStatement("INSERT INTO TEST.SAMPLE VALUES"
+ " (?, ?, ?, ?, ?, ?, ?,?,ARRAY("+ idlist +"))";
for (int i = 1; i <= ITERATION_MAX; i++) {
idlist=listofdata.get(i).get_idlist();
stmt.setInt(1, listofdata.get(i).get_id());
stmt.setInt(2, listofdata.get(i).get_name());
stmt.setInt(3, listofdata.get(i).get_place());
stmt.setInt(4, listofdata.get(i).get_year());
stmt.setInt(5, listofdata.get(i).get_day());
stmt.setInt(6, listofdata.get(i).get_rollno());
stmt.setInt(7, listofdata.get(i).get_main_subject());
stmt.setArray(8, listofdata.get(i).get_elective());
stmt.addBatch();
}
stmt.executeBatch();
但是这里有一个名为idlist的字符串(无法设置),每次都与insert语句连接。
但idlist的值在每个循环中由listofdata.get(i).get_idlist();
我无法设置参数,因为存在数据类型冲突问题(HANA数据库)。所以我只能这样做。但是如何保持每个语句的idlist值更改。它不会改变整个批次。感谢任何帮助
答案 0 :(得分:1)
如果您不知道idlist
中将有多少ID,则无法使用相同的预准备语句,因为参数数量会发生变化(即?
的数量
Prepared语句只能与完全相同的SQL字符串一起使用。
但似乎你必须拥有相同数量的参数,因为它们是表格中的列。
然后构建具有相应数量?
的SQL字符串。或者,如果它们可以为空(我猜是这样),则对所有列使用?
。
然后,当你设置参数时,你需要遍历你的idlist,设置可用,并将其余的参数设置为null。