PreparedStatement批处理执行仅执行最后一批

时间:2013-06-19 11:25:26

标签: java sql prepared-statement

我在准备好的声明批处理中遇到问题:

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);
}

由于某种原因,它只更新最后一批(最后一部电话)。

为什么会这样?

1 个答案:

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