2010-04-27 1 views
6

Когда я называю SQL заявление через JDBC на DB2 и утверждение терпит неудачу, я поймать SQLException с текстом сообщения:Как получить описательные сообщения об ошибках из DB2?

com.ibm.db2.jcc.a.nn: DB2 SQL Error: SQLCODE=-206, SQLSTATE=42703, 
    SQLERRMC=O.METADATENSATZ, DRIVER=3.52.95 

Я попробовал автоматический перевод сообщения в соответствии с error list published by IBM, но являются заполнителями внутри сообщений, ссылающихся на другие элементы исключения.

При поиске этих элементов внутри исключения я нашел DB2ExceptionFormatter и попытался использовать его для доступа к отсутствующим элементам.

Но здесь я остановился, потому что DB2ExceptionFormatter дал мне ключ: Произошла

Ошибка при попытке получить текст сообщения с сервера. Доступны только токены.

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

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

+0

Чтобы ответить на этот вопрос, было бы полезно узнать, какую версию и систему DB2 (LUW, z/OS, AS400 и т. Д.) Вы используете. –

ответ

6

Я не уверен, что сообщение ссылки вы смотрите выше (кажется, быть ISeries), но вы лучше идти к ссылке DB2 сообщений по here

Глядя SQL0206 получает нас this page, со следующей информацией:?.

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

SQLERRMC является «O.METADATENSATZ», так что я бы это означать, что вы направили заявление SQL в DB2, и он сообщает, что «O.METADATENSATZ» не действует ... либо столбец Безразлично» t существует или таблица «O» не существует.

Как message reference состояний, если вы хотите, чтобы автоматически перевести сообщения об ошибках DB2:

Для вызова справки по сообщениям откройте процессор командной строки и введите:

? XXXnnnnn

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

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

? nnnnn

или

? nn

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

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

+0

+1 для указания на лучший список SQLSTATE. – tangens

3

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

retrieveMessagesFromServerOnGetMessage:

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


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

O.METADATENSATZ 

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


Теперь я нашел this:

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

...

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

WLM является DB2 Workload Manager, который не доступен для издания DB2 Express я использую для развития :-(

Смежные вопросы