Datentypen und Fehlerbehandlung 6 Datentypen und Fehlerbehandlung 6.1 Datentypen JDBC-Typ Java-Typ CHAR VARCHAR LONGVARCHAR NUMERIC DECIMAL BIT TINYINT SMALLINT INTEGER BIGINT REAL FLOAT DOUBLE BINARY VARBINARY LONGVARBINARY DATE TIME TIMESTAMP String String String java.math.BigDecimal java.math.BigDecimal boolean byte short int long float double double byte[] byte[] byte[] java.sql.Date java.sql.Date Time java.sql.Date Timestamp TFH Berlin/Steyer Datentypen und Fehlerbehandlung 6.2 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 TFH Berlin/Steyer Datentypen und Fehlerbehandlung 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