2010-04-27 24 views
6

Quando chiamo un'istruzione SQL tramite JDBC sul DB2 e la dichiarazione non riesce, ho prendere uno SQLException con il seguente messaggio di testo:Come ottenere messaggi di errore descrittivi da DB2?

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

ho cercato una traduzione automatica del messaggio secondo il error list published by IBM, ma ci sono segnaposto all'interno dei messaggi che fanno riferimento ad altri elementi dell'eccezione.

Mentre cercavo questi elementi all'interno dell'eccezione, ho trovato il DB2ExceptionFormatter e ho provato a utilizzarlo per accedere agli elementi mancanti.

Ma qui mi fermo, perché il DB2ExceptionFormatter mi ha dato un indizio: si è verificato

Errore durante il tentativo di ottenere il testo del messaggio dal server. Sono disponibili solo token dei messaggi.

Quindi la mia domanda è: Cosa devo configurare per ottenere i messaggi corretti dal server DB2?

Se riesco a ottenere un messaggio leggibile dal server, potrei usarlo direttamente e non doverlo tradurre da solo.

+0

Per rispondere a questa domanda, sarebbe utile sapere quale versione e sistema DB2 (LUW, z/OS, AS400, ecc.) Si stanno utilizzando. –

risposta

6

io non sono sicuro di quello di riferimento del messaggio che stai guardando sopra (sembra per essere iSeries), ma si conviene andare al DB2 Message Reference oltre here

Alzando SQL0206 ci porta this page, con le seguenti informazioni:?.

nome non è valido nel contesto in cui viene utilizzato.

Lo sqlerrmc è "O.METADATENSATZ", così mi avrebbe preso questo per significare che hai mandato, un'istruzione SQL per DB2 e riporta che "O.METADATENSATZ" non è valido ... sia la colonna doesn' esiste o la tabella "O" non esiste.

quanto message reference stati, se si desidera tradurre automaticamente i messaggi di errore DB2:

Per invocare messaggio di aiuto, aprire il processore riga di comando e digitare:

? XXXnnnnn

dove XXX rappresenta un prefisso di messaggio valido e nnnnn rappresenta un numero di messaggio valido.

Il testo del messaggio associato a un determinato valore SQLSTATE possono essere recuperate mediante l'emissione di:

? nnnnn

o

? nn

dove nnnnn è a cinque cifre SQLSTATE (alfanumerico) e nn è il codice di classe SQLSTATE a due cifre (prime due cifre del valore SQLSTATE).

Nel tuo caso, digitando "? SQL0206" in un DB2 CLP verrà visualizzato il messaggio di errore.

+0

+1 per indicarmi la migliore lista SQLSTATE. – tangens

3

ho trovato un suggerimento here:

retrieveMessagesFromServerOnGetMessage:

di specificare se le chiamate JDBC SQLException.getMessage causano il driver IBM DB2 per JDBC e SQLJ di invocare una procedura di DB2 per z/OS memorizzata che recupera il testo del messaggio per l'errore. Il tipo di dati di questa proprietà è booleano. L'impostazione predefinita è false, il che significa che il testo completo del messaggio non viene restituito al client.


Ho provato questo, ma l'uscita di sqlException.getMessage() cambiato solo per

O.METADATENSATZ 

senza alcun testo del messaggio circostante.


Ora ho trovato this:

Prima di poter utilizzare alcune funzioni del driver di IBM Data Server per JDBC e SQLJ su un DB2 per sottosistema z/OS®, è necessario installare una serie di stored procedure e creare un set di tabelle.

...

WLM deve essere installato sul sistema z/OS.

WLM è il DB2 Workload Manager che non è disponibile per l'edizione di DB2 Express che sto utilizzando per lo sviluppo :-(

Problemi correlati