2010-04-27 6 views
6

Quand j'appelle une instruction SQL via JDBC sur DB2 et l'instruction ne réussit pas, je prends un SQLException avec le texte du message suivant:Comment obtenir des messages d'erreur descriptifs de DB2?

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

J'ai essayé une traduction automatique du message selon le error list published by IBM, mais il sont des espaces réservés dans les messages référençant d'autres éléments de l'exception. En recherchant ces éléments dans l'exception, j'ai trouvé le DB2ExceptionFormatter et essayé de l'utiliser pour accéder aux éléments manquants.

Mais ici je me suis arrêté, parce que le DB2ExceptionFormatter m'a donné un indice:

Une erreur est survenue en essayant d'obtenir le texte du message du serveur. Seuls les jetons de message sont disponibles.

Ma question est: Que dois-je configurer pour obtenir les messages corrects à partir du serveur DB2?

Si je peux obtenir un message lisible par un humain à partir du serveur, je pourrais l'utiliser directement et je n'aurais pas à le traduire moi-même.

+0

Afin de répondre à cette question, il serait utile de connaître la version et le système DB2 (LUW, z/OS, AS400, etc.) que vous utilisez. –

Répondre

6

Je ne suis pas sûr de ce que référence message que vous regarder ci-dessus (il semble être iSeries) mais vous êtes mieux d'aller au message DB2 Référence sur here

Looking up SQL0206 nous obtient this page, les informations suivantes:.

Le nom n'est pas valide dans le contexte où il est utilisé.

Le SQLERRMC est « O.METADATENSATZ » donc je prendrais cela pour signifier que vous avez envoyé une instruction SQL à DB2 et il rapporte que « O.METADATENSATZ » est pas valide ... soit la colonne n » t existe ou la table "O" n'existe pas.

Comme les message reference états, si vous voulez traduire automatiquement les messages d'erreur DB2:

Pour accéder à l'aide du message, ouvrez le processeur de ligne de commande et entrez:

? XXXnnnnn

où XXX représente un préfixe de message valide et nnnnn représente un numéro de message valide.

Le texte du message associé à une valeur SQLSTATE peut être obtenu en lançant:

? nnnnn

ou

? où nnnnn est un SQLSTATE à cinq chiffres (alphanumérique) et nn le code à deux chiffres de la classe SQLSTATE (les deux premiers chiffres de la valeur SQLSTATE). nn

Dans votre cas, en tapant "? SQL0206" dans DB2 CLP, vous obtiendrez le message d'erreur.

+0

+1 pour me pointer vers la meilleure liste SQLSTATE. – tangens

3

J'ai trouvé un soupçon here:

retrieveMessagesFromServerOnGetMessage:

Indique si les appels JDBC SQLException.getMessage planteront le pilote IBM DB2 pour JDBC et SQLJ DB2 pour appeler une procédure stockée pour z/OS qui récupère le texte du message pour l'erreur. Le type de données de cette propriété est booléen. La valeur par défaut est false, ce qui signifie que le texte du message complet n'est pas renvoyé au client.


J'ai essayé, mais la sortie de sqlException.getMessage() seulement sans texte du message entourant changé à

O.METADATENSATZ 

.


Maintenant, je trouve this:

Avant de pouvoir utiliser certaines fonctions du pilote de données IBM® Server pour JDBC et SQLJ sur un sous-système z pour DB2/de OS®, vous devez installer un ensemble de procédures stockées et créer un ensemble de tables.

...

WLM doit être installé sur le système z/OS.

WLM est le DB2 Workload Manager qui ne sont pas disponibles pour l'édition de DB2 Express J'utilise pour le développement :-(

Questions connexes