Oracle JDBC поддерживает две разные модели пакетирования обновлений: стандартная пакетная обработка и специфичная для Oracle групповая обработка.
В соответствии с Руководством разработчика JDBC oracle 11g, в любом отдельном приложении вы можете использовать одну или другую модель, , но не обе.Драйвер 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();
}</p>
<code>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 неверна?
Заранее спасибо