Как получить описательные сообщения об ошибках от DB2? - PullRequest
7 голосов
/ 27 апреля 2010

Когда я вызываю оператор 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?

Если бы я мог получить с сервера читаемое человеком сообщение, я мог бы использовать его напрямую, и мне не пришлось бы переводить его самостоятельно.

Ответы [ 2 ]

6 голосов
/ 27 апреля 2010

Я не уверен, какую ссылку на сообщение вы смотрите выше (похоже, это iSeries?), Но вам лучше перейти к Ссылке на сообщение DB2 через здесь .

Поиск SQL0206 приводит нас к этой странице со следующей информацией:

имя недопустимо в контексте, где оно используется.

SQLERRMC - это "O.METADATENSATZ", поэтому я бы сказал, что вы отправили оператор SQL в DB2, и он сообщает, что "O.METADATENSATZ" недопустим ... таблица "О" не существует.

Как указывается в сообщении , если вы хотите автоматически переводить сообщения об ошибках DB2:

Чтобы вызвать справку по сообщениям, откройте процессор командной строки и введите:

? XXXnnnnn

, где XXX представляет действительный префикс сообщения, а nnnnn представляет действительный номер сообщения.

Текст сообщения, связанный с данным значением SQLSTATE, можно получить, введя:

? NNNNN

или

? пп

где nnnnn - это пятизначный SQLSTATE (буквенно-цифровой), а nn - двухзначный код класса SQLSTATE (первые две цифры значения SQLSTATE).

В вашем случае, введя «? SQL0206» в DB2 CLP, вы получите сообщение об ошибке.

3 голосов
/ 27 апреля 2010

Я нашел подсказку здесь :

retrieveMessagesFromServerOnGetMessage:

Указывает, вызывают ли вызовы JDBC SQLException.getMessage драйвер IBM DB2 для JDBC и SQLJ для вызова хранимой процедуры DB2 for z / OS, которая получает текст сообщения для ошибки. Тип данных этого свойства логический. По умолчанию установлено значение false, что означает, что полный текст сообщения не возвращается клиенту.


Я пробовал это, но вывод sqlException.getMessage() изменился только на

O.METADATENSATZ

без окружающего текста сообщения.


Теперь я нашел это :

Прежде чем вы сможете использовать определенные функции драйвера IBM® Data Server для JDBC и SQLJ в подсистеме DB2 для z / OS, вам нужно установить набор хранимых процедур и создать набор таблиц.

...

WLM должен быть установлен в системе z / OS.

WLM - это Менеджер рабочей нагрузки DB2 , который недоступен для редакции DB2 Express, которую я использую для разработки: - (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...