java - MySql 中的多个更新语句

Kri*_*son 2 java mysql jdbc prepared-statement sql-update

所以我有一个软件,它基本上从我的 MySQL 数据库下载 1.5K 游戏服务器地址。然后它会对所有玩家执行 ping 操作,然后将在线玩家等信息上传回数据库。该过程如下所示:

  1. 下载服务器地址
  2. Ping 服务器并获取信息
  3. 将信息上传回数据库

到目前为止,我已经能够解决下载服务器主机名并对它们执行 ping 操作的部分,但更新服务器时会出现问题。

为了更新,我考虑使用 for 循环来构造一个由许多更新语句组成的大字符串并立即执行它,但这很容易出现 sql 注入。因此,理想情况下,人们会希望使用准备好的语句。

我使用的 SQL 更新语句是:

UPDATE serverlist SET `onlineplayers` = '3', maxplayers = '10', 
name = 'A game server' WHERE `ip` = 'xxx.xxx.xxx.xxx' AND `port` = 1234;
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:
如何使用参数化查询执行所有 1.5K 更新语句?

Dan*_*lan 5

如果你用谷歌搜索“jdbc批量更新”,你会得到很多像这样结果

后者有一个这样的例子:

try {
...
  connection con.setAutoCommit(false);                   
  PreparedStatement prepStmt = con.prepareStatement(    
    "UPDATE DEPT SET MGRNO=? WHERE DEPTNO=?");           
  prepStmt.setString(1,mgrnum1);                         
  prepStmt.setString(2,deptnum1);
  prepStmt.addBatch();                                   

  prepStmt.setString(1,mgrnum2);                        
  prepStmt.setString(2,deptnum2);
  prepStmt.addBatch();
  int [] numUpdates=prepStmt.executeBatch();             
  for (int i=0; i < numUpdates.length; i++) {            
    if (numUpdates[i] == -2)
      System.out.println("Execution " + i + 
        ": unknown number of rows updated");
    else
      System.out.println("Execution " + i + 
        "successful: " numUpdates[i] + " rows updated");
  }
  con.commit();                                          
} catch(BatchUpdateException b) {
  // process BatchUpdateException
} 
Run Code Online (Sandbox Code Playgroud)