Я хочу вставить несколько строк в таблицу из консоли / инструмента (например, Data Studio) Я получаю следующее сообщение об ошибке
ВСТАВЛЕНИЕ ИЛИ ОБНОВЛЕНИЕ ЗНАЧЕНИЯ ИНОСТРАННОГО КЛЮЧА FK $ MAR $S НЕВЕРНО.SQLCODE = -530, SQLSTATE = 23503, DRIVER = 4.13.111
Это означает, что у меня возникли некоторые проблемы с переменной FOREIGN KEY, но я решил, что позже, и она работает хорошо.
Моя проблема в том, что когда я выполняю тот же запрос из приложения Java, используя PreparedStatement.executeBatch()
(пакетно, потому что он может вставлять более одной строки за раз), я получаю другое сообщение об ошибке:
com.ibm.db2.jcc.am.wn: [jcc] [t4] [102] [10040] [3.57.82] Сбой пакета.Партия была отправлена, но по крайней мере одно исключение произошло с отдельным участником партии.Используйте getNextException (), чтобы получить исключения для определенных пакетных элементов.ОШИБКА = -4228, SQLSTATE = null
Когда я использовал getNextException()
, я получаю следующее:
com.ibm.db2.jcc.am.co:НЕАТОМИЧЕСКОЕ ВСТАВЛЕНИЕ ЗАЯВЛЕНИЯ, ПЫТАЮЩЕГОСЯ НА ОБРАБОТКУ НЕСКОЛЬКИХ СТРОК ДАННЫХ, НО ОШИБКИ ПРОИЗОШЛИ
И код ошибки -4228.
Почему эта разница?Я хочу, чтобы приложение java возвращало те же подробности ошибки, что и консольный инструмент, поэтому я могу обработать эти исключения в своем коде java.
Например, если возвращенный код ошибки = -803, что означает дублирование исключения, я быобработайте мой код, чтобы выполнить обновление вместо вставки, или если возвращаемое сообщение содержит некоторые слова, такие как «FOREIGN KEY», я скажу пользователю убедиться в том, что таблицы поиска и т. д.
Я использую DB2 версии 10.5.3 в z / OS и версии драйвера DB2: 3.65.92