Java mysql 准备好的语句更新不工作
Java mysql prepared statement update not working
这是我的代码:
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()
是 运行,我使用 workbench 检查数据库,但我没有看到 table 有任何变化。
您当前的代码仅在 count
的值大于 10000 时才执行更新,并且执行单次更新。好像你 want/need 使用批处理,所以你必须在每次迭代时将语句添加到批处理中(你没有做的事情)并在你的 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();
你能把整个代码贴出来吗?根据您提供的代码 updatepage.addBatch();/ updatepage.executeBatch();不见了。还要检查 dbConnection.setAutoCommit(false);.
这是我的代码:
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()
是 运行,我使用 workbench 检查数据库,但我没有看到 table 有任何变化。
您当前的代码仅在 count
的值大于 10000 时才执行更新,并且执行单次更新。好像你 want/need 使用批处理,所以你必须在每次迭代时将语句添加到批处理中(你没有做的事情)并在你的 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();
你能把整个代码贴出来吗?根据您提供的代码 updatepage.addBatch();/ updatepage.executeBatch();不见了。还要检查 dbConnection.setAutoCommit(false);.