2010-04-27 15 views
6

Kiedy wezwać SQL poprzez JDBC na DB2 oraz oświadczenie nie, ja złapać SQLException z następującym tekstem wiadomość:Jak uzyskać opisowe komunikaty o błędach z DB2?

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

Próbowałem automatyczne tłumaczenie wiadomości według error list published by IBM, ale nie są symbolami zastępczymi wewnątrz komunikatów odwołujących się do innych elementów wyjątku.

Szukając tych elementów wewnątrz wyjątku, znalazłem DB2ExceptionFormatter i próbowałem go użyć, aby uzyskać dostęp do brakujących elementów.

Ale tutaj zatrzymałem, bo DB2ExceptionFormatter dał mi wskazówkę:

Wystąpił błąd podczas próby uzyskania tekst wiadomości z serwera. Dostępne są tylko żetony wiadomości.

Więc moje pytanie brzmi: Co muszę skonfigurować, aby uzyskać poprawne wiadomości z serwera DB2?

Jeśli otrzymam od serwera czytelną dla człowieka wiadomość, mogę użyć jej bezpośrednio i nie będę musiał jej tłumaczyć samodzielnie.

+0

Aby odpowiedzieć na to pytanie, warto znać wersję i system DB2 (LUW, z/OS, AS400 itp.), Z których korzystasz. –

Odpowiedz

6

Nie jestem pewien, co wiadomość odniesienie patrzysz powyżej (wydaje być iSeries), ale jesteś lepiej będzie Reference DB2 Wiadomość nad here

Patrząc SQL0206 dostaje nam this page, z następującymi informacjami:.

nazwa nie jest poprawna w kontekście, w którym jest używana.

SQLERRMC jest „O.METADATENSATZ” tak wziąłbym to oznaczać wysłaniu instrukcji SQL do bazy danych DB2 i donosi, że „O.METADATENSATZ” nie jest poprawny ... albo kolumna robi” t istnieje lub tabela "O" nie istnieje.

Jak message reference stanach, jeśli chcesz, aby automatycznie przetłumaczyć komunikaty o błędach DB2:

Aby wywołać wiadomość pomocy, otwórz procesor wiersza komend i wpisz:

? XXXnnnnn

gdzie XXX reprezentuje prawidłowy przedrostek wiadomości, a nnnnn reprezentuje poprawny numer wiadomości.

Tekst komunikatu skojarzony z daną wartością SQLSTATE można pobrać poprzez emisję:

? nnnnn

lub

? nn

gdzie nnnnn jest pięciocyfrową wartością SQLSTATE (alfanumeryczną), a nn jest dwucyfrowym kodem klasy SQLSTATE (dwie pierwsze cyfry wartości SQLSTATE).

W twoim przypadku wpisanie "? SQL0206" w produkcie DB2 CLP spowoduje wyświetlenie komunikatu o błędzie.

+0

+1 za skierowanie mnie na lepszą listę SQLSTATE. – tangens

3

znalazłem wskazówkę here:

retrieveMessagesFromServerOnGetMessage:

Określa, czy połączenia JDBC SQLException.getMessage powodować sterownika IBM DB2 dla JDBC i SQLJ do wywołania procedury DB2 for z/OS przechowywane który pobiera tekst komunikatu z powodu błędu. Typ danych tej właściwości to boolean. Wartością domyślną jest false, co oznacza, że ​​pełny tekst komunikatu nie jest zwracany do klienta.


próbowałem tego, ale wyjście sqlException.getMessage() zmieniane tylko

O.METADATENSATZ 

bez otaczającego tekstu wiadomości.


Teraz znalazłem this:

Zanim będzie można korzystać z niektórych funkcji sterownika IBM Data Server dla JDBC i SQLJ na DB2® for z/OS podsystemu, trzeba zainstalować zestaw procedur składowanych i utwórz zestaw tabel.

...

WLM musi być zainstalowany w systemie z/OS.

WLM jest DB2 Workload Manager że nie jest dostępny do edycji DB2 Express używam rozwoju :-(

Powiązane problemy