Behandeln von Fehlern

JDBC-Treiber herunterladen

Bei der Verwendung des Microsoft JDBC-Treibers für SQL Server werden alle Datenbankfehlerbedingungen als Ausnahmen unter Verwendung der Klasse SQLServerException an Ihre Java-Anwendung zurückgegeben. Die folgenden Methoden der SQLServerException-Klasse werden von „java.sql.SQLException“ und „java.lang.Throwable“ geerbt. Mit ihnen können spezielle Informationen zum aufgetretenen SQL Server-Fehler zurückgegeben werden:

  • getSQLState() gibt den normalen X/Open- oder SQL99-Statuscode der Ausnahme zurück.

  • getErrorCode() gibt die jeweilige Datenbankfehlernummer zurück.

  • getMessage() gibt den vollständigen Text der Ausnahme zurück. Der Text der Fehlermeldung beschreibt das Problem und enthält häufig Platzhalter für Informationen wie Objektnamen, die in die angezeigte Fehlermeldung eingefügt werden.

  • getSQLServerError() gibt das SQLServerError-Objekt zurück, das ausführliche von SQL Server empfangene Informationen zur Ausnahme enthält. Diese Methode gibt NULL zurück, wenn kein Serverfehler aufgetreten ist.

Die folgenden Methoden der SQLServerError-Klasse können zum Abrufen zusätzlicher Informationen über den Fehler verwendet werden, der vom Server generiert wurde.

  • SQLServerError.getErrorMessage() gibt die vom Server empfangene Fehlermeldung zurück.

  • SQLServerError.getErrorNumber() gibt eine Zahl zurück, die zur Identifikation des Fehlertyps dient.

  • SQLServerError.getErrorState() gibt einen numerischen Fehlercode von SQL Server zurück, der einen Fehler, eine Warnung oder die Meldung „no data found“ (Keine Daten gefunden) darstellt.

  • SQLServerError.getErrorSeverity() gibt den Schweregrad des Fehlers zurück.

  • SQLServerError.getServerName() gibt den Namen des Computers zurück, auf dem die SQL Server-Instanz ausgeführt wird, die den Fehler generiert hat.

  • SQLServerError.getProcedureName() gibt den Namen der gespeicherten Prozedur oder des Remoteprozeduraufrufs zurück, der den Fehler generiert hat.

  • SQLServerError.getLineNumber() gibt die Zeilennummer im Transact-SQL-Befehlsbatch oder in der gespeicherten Prozedur zurück, die den Fehler generiert hat.

Im nächsten Beispiel wird eine offene Verbindung mit der SQL-AdventureWorks2022-Beispieldatenbank an die Funktion übergeben und eine fehlerhafte SQL-Anweisung erstellt, die keine FROM-Klausel enthält. Anschließend werden die Anweisung ausgeführt und eine SQL-Ausnahme verarbeitet.

public static void executeSQLException(Connection con) {
    try (Statement stmt = con.createStatement();) {
        String SQL = "SELECT TOP 10 * Person.Contact";
        ResultSet rs = stmt.executeQuery(SQL);

        while (rs.next()) {
            System.out.println(rs.getString("FirstName") + " " + rs.getString("LastName"));
        }
    }
    catch (SQLException se) {
        do {
            System.out.println("SQL STATE: " + se.getSQLState());
            System.out.println("ERROR CODE: " + se.getErrorCode());
            System.out.println("MESSAGE: " + se.getMessage());
            System.out.println();
        }
        while (se != null);
    }
}

Weitere Informationen

Diagnostizieren von Problemen mit dem JDBC-Treiber