Fehlerbehandlung - Beuth Hochschule für Technik Berlin

Werbung
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
Herunterladen