Когда я называю SQL-оператор через JDBC на DB2 и сбоях оператора, я ловлю SQLException со следующим текстом сообщения:
com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703,
SQLERRMC=O.METADATENSATZ, DRIVER=3.52.95
Я попробовал автоматический перевод сообщения согласно ошибочному списку, опубликованному IBM, но существуют заполнители в сообщениях, ссылающихся на другие элементы исключения.
При поиске этих элементов в исключении я нашел DB2ExceptionFormatter
и попробованный для использования его для доступа к недостающим элементам.
Но здесь я остановился, потому что DB2ExceptionFormatter
дал мне ключ к разгадке:
Ошибка произошла при попытке получить текст сообщения из сервера. Только маркеры сообщения доступны.
Таким образом, мой вопрос: Что я должен настроить для получения корректных сообщений от сервера DB2?
Если бы я могу получить человекочитаемое сообщение от сервера, я мог бы использовать его непосредственно и не должен был бы переводить его один.
Я не уверен, какое сообщение вы видите выше (это похоже на iSeries?), Но вам лучше перейти к справочнику сообщений DB2 по здесь .
Поиск SQL0206 дает нам эту страницу со следующей информацией:
имя недопустимо в контексте, в котором оно используется.
SQLERRMC - это «O.METADATENSATZ», поэтому я бы понял, что это означает, что вы отправили оператор SQL в DB2, и он сообщает, что «O.METADATENSATZ» недействителен ... либо столбец не существует, либо таблица «О» не существует.
Как указано в ссылке на сообщение , если вы хотите автоматически переводить сообщения об ошибках DB2:
Чтобы вызвать справку по сообщениям, откройте процессор командной строки и введите:
? XXXnnnnn
, где XXX представляет действительный префикс сообщения, а nnnnn представляет действительный номер сообщения.
Текст сообщения, связанный с заданным значением SQLSTATE, можно получить, введя:
? ннннн
или
? nn
, где nnnnn - это пятизначный SQLSTATE (буквенно-цифровой), а nn - двузначный код класса SQLSTATE (первые две цифры значения SQLSTATE).
В вашем случае, если ввести «? SQL0206» в DB2 CLP, вы получите сообщение об ошибке.
Я нашел подсказку здесь :
retrieveMessagesFromServerOnGetMessage:
Указывает, вызывают ли вызовы JDBC SQLException.getMessage драйвер IBM DB2 чтобы JDBC и SQLJ вызывали хранимую процедуру DB2 for z / OS, которая извлекает текст сообщения об ошибке. Тип данных этого свойства - логический. По умолчанию установлено значение false, что означает, что полный текст сообщения не возвращается клиенту.
Я пробовал это, но результат sqlException.getMessage ()
изменился только на
O.METADATENSATZ
без какого-либо окружающего текста сообщения.
Я нашел это :
Прежде чем вы сможете использовать определенные функции драйвера IBM® Data Server для JDBC и SQLJ в подсистеме DB2® for z / OS®, вам необходимо установить набор хранимых процедур и создать набор таблиц.
...
WLM должен быть установлен в системе z / OS.
WLM - это диспетчер рабочих нагрузок DB2 , который недоступен для редакции DB2 Express, которую я использую для разработки: - (