我正在使用Statements批查询我的数据库。我现在已经做了一些研究,我想重写我的应用程序以preparedStatement代替使用,但是我很难弄清楚如何向preparedStatement批处理中添加查询。
Statement
preparedStatement
这就是我现在正在做的:
private void addToBatch(String sql) throws SQLException{ sttmnt.addBatch(sql); batchSize++; if (batchSize == elementsPerExecute){ executeBatches(); } }
sttmnttype的类成员在哪里Statement?
sttmnt
我想做的是使用preparedStatement的setString(int, String)方法设置一些动态数据,然后将其添加到批处理中。
setString(int, String)
不幸的是,我不完全了解它的工作原理,以及如何setString(int, String)在批处理中使用特定的sql,或者preparedStatemnt为我拥有的每个sql 创建一个新的sql,然后将它们全部加入一个批处理。
preparedStatemnt
有可能这样做吗?还是我真的对我的理解有所缺失preparedStatement?
请阅读本文档的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 }