Oracle JDBC 支持两种不同的更新批处理模型:标准批处理和 Oracle 特定批处理。
根据 oracle 11g JDBC Developer Guide,在任何单个应用程序中,您可以使用一种模型或另一种模型,但不能同时使用这两种模型。当你混合这些时,Oracle JDBC 驱动程序会抛出异常。
在我的独立应用程序中,上述陈述不成立。我想知道我是否遗漏了什么。
在我的应用程序中,我创建了一个 OracleDataSource 并执行以下操作
connection = datasource.getConnection();
preparedStatement = connection.prepareStatement("update CAR set CAR_NAME=?, OBJECT_VERSION=? where CAR_ID=?");
for(Car car : cars) {
preparedStatement.setString(1, car.getName());
preparedStatement.setInt(2, car.getVersion() + 1);
preparedStatement.setLong(3, car.getId());
preparedStatement.addBatch();
}
System.out.println("Update Batch : " + Arrays.toString(preparedStatement.executeBatch()));
for(Car car : cars) {
car.setName("v car " + car.getId());
}
//Oracle Update Batching
connection.setAutoCommit(false);
PreparedStatement preparedStatement =
connection.prepareStatement("update CAR set CAR_NAME=?, OBJECT_VERSION=? where CAR_ID=?");
//Change batch size for this statement to 3
((OraclePreparedStatement)preparedStatement).setExecuteBatch (10);
for(Car car : cars) {
preparedStatement.setString(1, car.getName());
preparedStatement.setInt(2, car.getVersion() + 1);
preparedStatement.setLong(3, car.getId());
System.out.println("Execute Update Count " + preparedStatement.executeUpdate());
}
System.out.println("Update Count : " + ((OraclePreparedStatement)preparedStatement).sendBatch()); // JDBC sends the queued request
connection.commit();
preparedStatement.close();
上面的代码运行良好,我可以看到使用不同批处理模型的更新批处理执行良好。有什么我遗漏的或者我对 jdbc 开发人员指南的解释不正确吗?
提前致谢