小编典典

批量使用JDBC prepareStatement

java

我正在使用Statements批查询我的数据库。我现在已经做了一些研究,我想重写我的应用程序以preparedStatement代替使用,但是我很难弄清楚如何向preparedStatement批处理中添加查询。

这就是我现在正在做的:

private void addToBatch(String sql) throws SQLException{
sttmnt.addBatch(sql);
batchSize++;
if (batchSize == elementsPerExecute){
    executeBatches();
}
}

sttmnttype的类成员在哪里Statement

我想做的是使用preparedStatementsetString(int, String)方法设置一些动态数据,然后将其添加到批处理中。

不幸的是,我不完全了解它的工作原理,以及如何setString(int, String)在批处理中使用特定的sql,或者preparedStatemnt为我拥有的每个sql 创建一个新的sql,然后将它们全部加入一个批处理。

有可能这样做吗?还是我真的对我的理解有所缺失preparedStatement


阅读 225

收藏
2020-10-09

共1个答案

小编典典

请阅读本文档的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
}
2020-10-09