Fehlerbehandlung Fehlerbehandlung ist beim Datenbankprogrammieren ein wichtiges Thema. Denn zu den üblichen Syntax- und Laufzeitfehlern kommen noch zwei weitere Gruppen hinzu: Mehrbenutzerfehler wegen aktuell gesperrtem Datenbankzugriff, Anpassungsprobleme zwischen Programmiersprache und Datenbanksystem, z.B. bei den Wertebereichen der Datentypen. Datenbankprogramm mit Fehlerausgabe import java.sql.*; public class Fehlerprogramm { public static void main(String[] args) throws Exception { try { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Connection c = DriverManager.getConnection("jdbc:odbc:accessdb","",""); Statement s = c.createStatement(); ResultSet r = s.executeQuery("SELECT * FROM person"); while (r.next()) { System.out.println(r.getString("vorname") + " " + r.getString("nachname")); } c.close(); } catch (SQLException exc) { System.out.println ("SQLException:"); System.out.println ("SQLState : " + exc.getSQLState()); System.out.println ("Message : " + exc.getMessage()); System.out.println ("Vendor Code: " + exc.getErrorCode()); } } } Fehlermöglichkeiten auf mehreren Ebenen 1) data source nicht vorhanden Programmänderung Connection c = DriverManager.getConnection("jdbc:odbc:accdb","",""); Ausgabe SQLException: SQLstate : IM002 Message : [Microsoft][ODBC Driver Manager] Der Datenquellenname wurde nicht gefunden, und es wurde kein Standardtreiber angegeben. Vendor Code : 0 2) connection nicht möglich (z.B. Datenbank nicht vorhanden oder gesperrt) Programmänderung keine Ausgabe SQLException: SQLstate : S1000 Message : [Microsoft][ODBC Driver Manager] Datei ‚<unbekannt>’ nicht gefunden. Vendor Code : -1811 3) falsche exec-Methode (executeQuery, execute) Programmänderung ResultSet r = s.executeQuery("UPDATE person SET vorname = 'Max'"); Ausgabe SQLException: SQLstate : null Message : [Microsoft][ODBC Driver Manager] No ResultSet was produced. Vendor Code : 0 4) SQL-Syntax falsch Programmänderung ResultSet r = s.executeQuery("SELECT FROM person"); Ausgabe SQLException: SQLstate : 37000 Message : [Microsoft][ODBC Driver Manager] Die SELECT-Anweisung schliesst ein reserviertes Wort oder einen Argumentnamen ein, das/der falsch, mit falscher Zeichensetzung oder überhaupt nicht eingegeben wurde. Vendor Code : -3504 5) falsche Datenbezeichner Programmänderung ResultSet r = s.executeQuery("SELECT nr FROM person99"); Ausgabe SQLException: SQLstate : S0002 Message : [Microsoft][ODBC Driver Manager] Das Microsoft Jet-Datenbankmodul findet die Eingangstabelle oder Abfrage ‚person99’ nicht. Stellen Sie sicher, dass sie existiert und der Name richtig eingegeben wurde. Vendor Code : -1305 6) get-Typ falsch Programmänderung { System.out.println(r.getInt("vorname") + " " + r.getString("nachname")); Ausgabe SQLException: SQLstate : 22005 Message : [Microsoft][ODBC Driver Manager] Ungültiger Zeichenwert für Konvertierungsangabe, bei Spalte 1 <vorname> Vendor Code : 39 7) ResultSet leer abfangen if (!r.next()) System.out.println("Ergebnismenge leer"); TFH Berlin/Steyer