当前位置: 首页 > 知识库问答 >
问题:

Java mysql准备好的语句更新不工作

公孙英飙
2023-03-14

这是我的代码:

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

共有1个答案

邵兴庆
2023-03-14

当前代码仅在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();
 类似资料:
  • 我试图将预准备语句与跨表更新结合使用。我已经准备了一个代表我们更大数据库的示例脚本。这第一部分做我想要的没有准备好的语句,但我希望避免复制/粘贴我的数据的每一列。 这就是为什么我尝试了这样的东西作为更新函数的替代品。然而,我经常收到语法错误报告。有人能指出我哪里出错了吗?这将是非常感谢!

  • 我有一个将列名映射到值的。要更新的列事先未知,在运行时决定。 例如< code>map = {col1: "value1 ",col2: "value2"}。 我想执行一个< code>UPDATE查询,用这些列将表更新为相应的值。我能做以下事情吗?如果没有,有没有一种优雅的方法可以不用手动构建查询?

  • 我有以下准备的一个准备好的声明失败了... 我在我的第一份准备好的声明中几乎有同样的准备,而且它进行得很好。我不确定是否我有两个准备好的声明,如果这是造成一个问题,或情况可能是什么? 现在我有个错误... 更新-可能的内部连接,像这样?

  • 问题内容: 我刚刚开始做我的第一个项目(很有趣)。我正在学习PHP和MySQL,并且已经完成了我的第一个正常工作的应用程序。它可以工作,但是我现在正在学习如何保护应用程序的安全,从而防止SQL注入。我大约有50多个PHP文件来管理与MySQL数据库的交互。它们看起来都是这样的: 这是我在整个应用程序中用于向数据库读写数据的格式。如果我需要将它们更改为准备好的语句,而不是在其中插入任何信息,而只是在

  • 场景:继我之前的问题(在存储过程中使用游标循环行MySQL)之后,我尝试执行一个嵌套的prepare语句,在该语句中,我向外部语句输入一个日期,然后调用内部语句,该语句从表中获取数据。 代码: 问题:这段代码运行时没有错误,但没有给出任何结果。如果我只运行第一个准备好的语句,一个接一个地直接输入变量,就可以了。所以我猜问题在于我的第二句话。 问题:你知道我做错了什么吗? Obs:第二个代码应该循环