PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PostgreSQL - JDBC - Fehlerbehandlung



revak
26-05-2005, 00:31
Moin,

ich beschäftige mich gerade ein wenig mit PostgreSQL+JDBC, wie der Titel schon sagt. Bin dabei ein kleines Tool zu schreiben, mit dem man u.a. beliebige Anfragen an die DB stellen kann. Das funktioniert auch schon recht gut, aber die Fehlerbehandlung macht mir Probleme.
Frage:
Wie kann ich auf fehlerhafte SQL-Statements reagieren, also etwas detaillierter als nur eine allgemeine Error-Message? Wie bekomme ich eine spezielle Fehlermeldung/Fehlercode o.ä. aus der DB, was ich wiederum durch mein Anwendungsprogramm ausgeben lassen kann?

Alex_K
26-05-2005, 09:51
wenn du ein query ausführst wird im fehlerfall eine SQLException geworfen in der alle informationen vorhanden sind (sein sollten):

http://java.sun.com/j2se/1.5.0/docs/api/java/sql/SQLException.html

die frage ist ob der postgresql jdbc das auslesen der error codes untersützt. das pqxx (C++) interface tut das z.b. nicht.

mwanaheri
26-05-2005, 10:06
Wenn ich vermeiden will, dass mein Programm abstürzt (der Dump ist häufig sehr aussagekräftig), werfe ich eine erweiterte Fehlermeldung:

try{
...
}catch(SQLException sqle){
throw new SQLException("Fehler in Klasse:Funktion\n Parameter: ...\n " + sqle.getMessage()
}

Das hilft bei der Fehlersuche ungemein, bringt aber für die "Auslieferungsversion" nichts.
Da geht es kaum aussagekräftiger als sqle.getMessage(), evtl noch sqle.getLocalizedMessage(). Du kannst dir natürlich eine eigene Fehlerklasse bauen, aber das ist sehr viel Arbeit, wenn du z.B. den SQL-String vernünftig parsen willst.

revak
26-05-2005, 23:16
Danke für die Hilfe, auch wenn es nicht ganz das Erwünschte lieferte. Ich hatte schon etwas mit der SQLException rumprobiert:
try {
...
}
catch(SQLException e)
{
e.getNextException();
do {
// Ausgabe von Fehlermeldung und Fehlercodes
System.out.println(e.getMessage());
System.out.println("ANSI-92 Code: "+e.getSQLState());
System.out.println("DB-Code: "+e.getErrorCode());
// Nächste Exception abrufen.
e = e.getNextException();
// Gibt es weitere Exceptions?
} while(e != null);

Den Schnipsel Code hatte ich auf irgendeiner Java-Seite gefunden.
getMessage() funktioniert, getSQLState() und getErrorCode() leider nicht. Das ist zwar besser als gar nichts, aber so richtig schön ist es nicht.
Ich hatte eigentlich nicht vor, eine komplett eigene Syntaxanalyse zu schreiben, aber so wie es aussieht, könnte es langsam lohnen. Vielleicht ist es ja ganz interessant.