我在准备好的语句批处理执行器上遇到麻烦:
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);
}
由于某种原因,它只会更新最后一批(最后一部手机)。
为什么会这样呢?
最佳答案
prepStmt1 = connBlng.prepareStatement("update table set done='yes' where phone=?");
prepStmt1.setString(1, phone);
prepStmt1.addBatch();
您将使对
prepStmt1
的先前引用无效,因此batch
将仅包含您尝试处理的最后一个元素。您想要的是:
prepStmt1 = connBlng.prepareStatement("update table set done='yes' where phone=?");
while(...)
{
prepStmt1.setString(1, phone);
prepStmt1.addBatch();
}
解决方法是只分配一次已参数化的SQL语句,并在每次通过时翻转参数。类似于编写函数并仅通过参数列表更改其输入的方式。