Метод ExecuteBatch возвращает массив значения -2 в java

Когда я выполняю метод executeBatch в java, его возвращает массив int, который отлично, но значение равно -2 из всех элементов массива,

это должно быть 0 или + ve число, которое показывает количество затронутых строк, но его возвращение -2,

когда я проверил его в базе данных, все обновления были успешными. пожалуйста, объясните, в чем смысл этого -2 и как я нахожу количество затронутых строк.

Спасибо, Deepesh Uniyal

Ответы

Ответ 1

В jdbc-spec имеется следующее сообщение о возвратном коде пакетных обновлений:

■ 0 или больше - команда была успешно обработана, и значение подсчет обновлений, указывающий количество строк в базе данных, на которые повлияло выполнение команд Глава 14 Пакетные обновления 121

■ Statement.SUCCESS_NO_INFO - команда была успешно обработана, но количество затронутых строк неизвестно

Statement.SUCCESS_NO_INFO определяется как -2, поэтому ваш результат говорит, что все работает нормально, но вы не получите информацию о количестве обновленных столбцов.

В документации оракула говорится:

• Для подготовленной части оператора невозможно узнать количество строк, затронутых в базе данных, каждым отдельным оператором в пакете. Следовательно, все элементы массива имеют значение -2. Согласно спецификации JDBC 2.0, значение -2 указывает, что операция прошла успешно, но количество затронутых строк неизвестно.

• Для общей партии операторов массив содержит фактические подсчеты обновления, указывающие количество строк, на которые влияет каждая операция. Фактические подсчеты обновления могут быть предоставлены только в случае общих операторов в реализации Oracle стандартной пакетной обработки.

• Для пакета вызываемых операторов сервер всегда возвращает значение 1 в качестве количества обновлений, независимо от числа строк, на которые влияет каждая операция.

Итак, если вам нужны подсчеты обновления, вы не можете использовать PreparedStatement, но должны вернуться к обычным Statement s.

Ответ 2

Значение -2 указывает, что элемент обработан успешно, но количество строк, которые были изменены, неизвестно.

спецификации

Ответ 3

Обратите внимание, что с Oracle 12c это больше не должно быть:

Для подготовленной части оператора массив содержит фактические подсчеты обновления, указывающие количество строк, затронутых каждой операцией.

См. https://docs.oracle.com/database/121/JJDBC/oraperf.htm#JJDBC28773