我在准备好的声明批处理中遇到问题:
try{
while (operatorsQuery.next()) {
phone = Integer.toString(operatorsQuery.getInt(1));
prepStmt1 = connBlng.prepareStatement("update table set done='yes' where phone=?");
prepStmt1.setString(1, phone);
prepStmt1.addBatch();
}
prepStmt1.executeBatch();
} catch(Exception e){
e.printStackTrace();
} finally{
closeStatmentandRS(operatorsQuery, prepStmt1);
}
由于某种原因,它只更新最后一批(最后一部电话)。
为什么会这样?
答案 0 :(得分:2)
prepStmt1 = connBlng.prepareStatement("update table set done='yes' where phone=?");
prepStmt1.setString(1, phone);
prepStmt1.addBatch();
您使以前对prepStmt1
的引用无效,因此batch
只会有您尝试处理的 last 元素。
你想要的是这个:
prepStmt1 = connBlng.prepareStatement("update table set done='yes' where phone=?");
while(...)
{
prepStmt1.setString(1, phone);
prepStmt1.addBatch();
}
修复方法是仅分配参数化的SQL语句一次,并在每次传递时翻转参数。类似于编写函数的方式,只需通过参数列表更改输入。