Bor*_*s C 17 java jdbc batch-file prepared-statement
我使用Statements批次来查询我的数据库.我现在做了一些研究,我想重写我的应用程序,preparedStatement但我很难弄清楚如何向preparedStatement批处理中添加查询.
这就是我现在正在做的事情:
private void addToBatch(String sql) throws SQLException{
sttmnt.addBatch(sql);
batchSize++;
if (batchSize == elementsPerExecute){
executeBatches();
}
}
Run Code Online (Sandbox Code Playgroud)
where sttmnt类型的类成员Statement.
我想要做的是使用preparedStatement的setString(int, String)方法来设置一些动态的数据,然后将其添加到批处理.
不幸的是,我不完全了解它是如何工作的,以及如何我可以使用setString(int, String)到特定的SQL批处理或创建一个新preparedStatemnt的每个SQL我有,然后将它们全部加入到一个批次.
有可能这样做吗?还是我真的错过了我的理解preparedStatement?
San*_*rma 18
有关示例,请阅读本文档的6.1.2节.基本上,您使用相同的语句对象,并在设置所有占位符后调用批处理方法.另一个适用于任何JDBC实现的IBM DB2示例.从第二个网站:
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)
随着PreparedStatement的你有外卡的方式,例如
Sring query = "INSERT INTO users (id, user_name, password) VALUES(?,?,?)";
PreparedStatement statement = connection.preparedStatement(query);
for(User user: userList){
statement.setString(1, user.getId()); //1 is the first ? (1 based counting)
statement.setString(2, user.getUserName());
statement.setString(3, user.getPassword());
statement.addBatch();
}
Run Code Online (Sandbox Code Playgroud)
这将PreparedStatement使用上面显示的查询创建1.当您要插入或任何您想要的内容时,您可以遍历列表.如果你想执行你,
statement.executeBatch();
statement.clearBatch(); //If you want to add more,
//(so you don't do the same thing twice)
Run Code Online (Sandbox Code Playgroud)
我在这里为MySQL添加一个额外的答案。
我发现执行批插入的时间与执行单个插入的时间长度相似,即使在批处理中执行一次事务也是如此。
我将参数添加rewriteBatchedStatements=true到我的jdbc url中,并看到了显着的改进-在我的情况下,从125毫秒开始的200次插入操作已完成。不带参数的时间约为10至15毫秒。与参数。
请参阅带有rewriteBatchedStatements = true的MySQL和JDBC
| 归档时间: |
|
| 查看次数: |
44939 次 |
| 最近记录: |