2

我在使用准备好的语句批处理执行器时遇到问题:

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

并且由于某种原因,它只更新最后一批(最后一部手机)。

为什么会这样?

4

1 回答 1

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

于 2013-06-19T11:34:29.410 回答