我正在使用 JDBI 将一些数据插入到具有自动增量主键的 mysql 表中。我使用索引来进行插入。代码如下所示:
public void insertWorkout(String[] values) {
String insertString = "insert into workouts(<column_names>) values(:0,:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:21,:22,:23,:24,:25,:26,:27,:28,:29,:30,:31)";
Update pUpdate = handle.createStatement(insertString);
for(int i=0; i<vals.length;i++) {
pUpdate.bind(i, vals[i]);
}
pUpdate.execute();
}
这已经工作了一段时间,因为values[]
始终是正确的 count(32) 并且参数始终处于相同的顺序。现在虽然它必须处理传递一个较小的数组(18、19 或 20)并且仍然正确地进行插入;最后 14 个左右的 args 可以为空或空白。值的顺序仍然是静态的(即,如果传递 18 列,则它是表中的前 18 列)并且最后 20 列都是int(11)
列。
现在,当它传递一个小于 32 的数组时,它会给出如下错误:
org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: Unable to execute, no named parameter matches "20" and no positional param for place 20 (which is 21 in the JDBC 'start at 1' scheme) has been set.
解决这个问题的最佳方法是什么?