这是我的代码:
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()
运行后,我使用工作台检查数据库,但我没有看到该表的任何更改。
答案 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);。