Kri*_*son 2 java mysql jdbc prepared-statement sql-update
所以我有一个软件,它基本上从我的 MySQL 数据库下载 1.5K 游戏服务器地址。然后它会对所有玩家执行 ping 操作,然后将在线玩家等信息上传回数据库。该过程如下所示:
到目前为止,我已经能够解决下载服务器主机名并对它们执行 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 更新语句?
如果你用谷歌搜索“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)