Я работаю над приложением, в котором я использую JDBC и Oracle11.ORACLE JDBC Пакетное исполнение не возвращает фактическое количество затронутых строк
У меня есть сотни тысяч записей в моем столе tbltest
, которые я обновляю через JDBC пакетное исполнение. Так что считайте это одним id = одним запросом.
Мои требования: Я хочу отслеживать, какие id
s успешно обновлены и которые не существуют в db.
Ниже мой код:
String sql = "UPDATE TBLTEST SET STATUS = 'CANCEL' WHERE ID = ?";
PreparedStatement preparedStatement = null;
Connection connection = getConnection(); // I'm getting this connection properly
preparedStatement = connection.prepareStatement(sql);
for (String id : idList) { // idList is a List of String being passed to my method
preparedStatement.setString(1, id);
preparedStatement.addBatch();
}
int[] affectedRecords = preparedStatement.executeBatch();
System.out.println("Records affected:"+Arrays.toString(affectedRecords));
int success = preparedStatement.getUpdateCount();
System.out.println(success + " Total updated");
Мои записи успешно обновляются в соответствии с idList
условием. Согласно this Javadoc, в affectedRecords
, я должен получить фактический номер. записей, обновляемых каждым обновлением, потому что я не получаю никаких исключений. Вместо этого я получаю массив affectedRecords
, заполненный -2. Так что, если idList
содержит 5 элементов:
Фактический выход:
Records affected: [-2, -2, -2, -2, -2]
5 Total updated
Ожидаемый результат:
Records affected: [1, 1, 1, 1, 1]
5 Total updated
Я искал этот вопрос в интернете и наткнулся на некоторые должности, подобные этим: https://community.oracle.com/thread/3691652?start=0&tstart=0 https://community.oracle.com/thread/1046798?tstart=0
Но решения, предоставленные в этих сообщениях, также не помогают мне, поскольку я уже использую только ojdbc6.jar.
Итак, есть ли решение или альтернатива этой проблеме?
Спасибо за ответ Йенс. Но у меня нет другой версии ojdbc jar. Я уже упоминал в своем вопросе, что я использую ojdbc6.jar. Я использую только Java 6. У меня нет Java 5. – RAS
Да, и это не имеет значения, как указано в моем ответе и в теме, связанной с моим вопросом и вашим ответом. Там есть много разных ojdbc6.jars. И вам нужен последний. Нет, где вы статировали, что вы получили новую версию драйвера из oracle и проверили, что она действительно используется. –
Это тоже не помогает. – RAS