如何在每个值的预准备语句中更改值

时间:2017-02-02 00:54:22

标签: java jdbc sql-insert

我正在执行以下代码,以便批量执行插入。

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值更改。它不会改变整个批次。感谢任何帮助

1 个答案:

答案 0 :(得分:1)

如果您不知道idlist中将有多少ID,则无法使用相同的预准备语句,因为参数数量会发生变化(即?的数量

Prepared语句只能与完全相同的SQL字符串一起使用。

但似乎你必须拥有相同数量的参数,因为它们是表格中的列。

然后构建具有相应数量?的SQL字符串。或者,如果它们可以为空(我猜是这样),则对所有列使用?

然后,当你设置参数时,你需要遍历你的idlist,设置可用,并将其余的参数设置为null。