18.2.7 | Fehlerbehandlung |
Beim Auftreten eines Fehlers bei JDBC API-Aufrufen wird vom JDBC-Treiber eine SQLException ausgelöst. Deshalb sollte man JDBC-Aufrufe immer in einen try/catch-Block einschließen, in dem Fehler entsprechend behandelt werden können: Die Ursache von Fehlern bei JDBC-Aufrufen kann entweder beim Datenbanksystem oder beim JDBC-Treiber selbst liegen. Tabelle 18.2 zeigt die Methoden der Klasse SQLException, die nähere Informationen über aufgetretene Fehler liefert. Abhängig von Treiber- oder Datenbanksystem-Fehlern liefern sie teilweise andere Informationen zurück.
Folgendes Beispiel zeigt, wie Laufzeitfehler von JDBC abgefangen und Informationen zum Fehler ausgegeben werden:try { // Hier JDBC-Aufrufe ... } catch(SQLException e) { 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); } ...Treten mehrere Fehler bei der Ausführung auf, so werden mehrere SQLException-Exemplare miteinander verkettet. Über die Methode getNextException() kann man jeweils das nächste SQLException-Exemplar abrufen. Wurden alle abgerufen, liefert die Methode als Ergebnis null zurück.
Tabelle 18.2: Methoden der Klasse SQLException zur Fehlerabfrage Methode Wert bei Treiber-Fehler Wert bei DB-Fehler String getMessage() Fehlermeldung Fehlermeldung int getErrorCode() DB-spezifischer Fehlercode DB-spezifischer Fehlercode. String getSQLState() null (ohne Bedeutung) 5-stelliger ANSI-92 SQL Status-Code als String.
Bei der Entwicklung datenbanksystemunabhängiger JDBC-Anwendungen empfiehlt es sich, die Fehlerabfrage über ANSI-92 Fehlercodes durchzuführen, da diese Codes von verschiedenen Datenbanksystemen bereitgestellt werden.