我在准备好的语句批处理执行器上遇到麻烦:

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语句,并在每次通过时翻转参数。类似于编写函数并仅通过参数列表更改其输入的方式。

10-04 20:32