Java mysql编写的语句更新无法正常工作

时间:2015-05-07 20:16:34

标签: java jdbc prepared-statement

这是我的代码:

ResultSet rs = statement.executeQuery("select * from page");
PreparedStatement updatepage = mySqlCon.prepareStatement("update enwiki.page set enwiki.page.Text = ? where page_id = ?");
int count = 0;
while (rs.next())
{
     int id = rs.getInt("id");
     String text = rs.getString("text");
     if(text == null)
          text = "";
     updatepage.setString(1, text);
     updatepage.setInt(2, id);


     if(count++ > 10000)
     {
         updatepage.executeUpdate();
         updatepage.clearBatch();            
         count = 0;
      }
}

updatepage.executeUpdate();

问题出在以下行:updatepage.executeUpdate()运行后,我使用工作台检查数据库,但我没有看到该表的任何更改。

2 个答案:

答案 0 :(得分:3)

当前代码仅在count的值大于10000时执行更新,并且它执行单个更新。看起来你想要/需要使用批处理,所以你必须在每次迭代时将这些语句添加到批处理中(你没有做的事情)并在if内执行批处理中的所有语句(某些东西)你也没做过。)

代码将是这样的:

while (rs.next()) {
    int id = rs.getInt("id");
    String text = rs.getString("text");
    if(text == null)
        text = "";
    updatepage.setString(1, text);
    updatepage.setInt(2, id);

    //add the current statement to the batch
    updatepage.addBatch();
    if(count++ > 10000) {
        //line below will only execute the current statement (useless)
        //updatepage.executeUpdate();
        //line below will clear the batch statements (useless too)
        //updatepage.clearBatch();
        updatepage.executeBatch();
        count = 0;
    }
}
//updatepage.executeUpdate();
updatepage.executeBatch();

答案 1 :(得分:-1)

你能粘贴整个代码吗?从你提供的代码updatepage.addBatch(); / updatepage.executeBatch();不见了。另请检查dbConnection.setAutoCommit(false);。