Udostępnij przez


Obsługa błędów

pobierz sterownik JDBC

W przypadku korzystania ze sterownika JDBC firmy Microsoft dla programu SQL Server wszystkie warunki błędu bazy danych są zwracane do aplikacji Java jako wyjątki przy użyciu klasy SQLServerException . Następujące metody klasy SQLServerException są dziedziczone z java.sql.SQLException i java.lang.Throwable; i mogą służyć do zwracania określonych informacji o błędzie programu SQL Server, który wystąpił:

  • getSQLState() Zwraca standardowy kod stanu X/Open lub SQL99 wyjątku.

  • getErrorCode() Zwraca określony numer błędu bazy danych.

  • getMessage() Zwraca pełny tekst wyjątku. Tekst komunikatu o błędzie opisuje problem i często zawiera symbole zastępcze informacji, takich jak nazwy obiektów, które są wstawiane w komunikacie o błędzie podczas jego wyświetlania.

  • getSQLServerError() SQLServerError Zwraca obiekt zawierający szczegółowe informacje o wyjątku odebrane z programu SQL Server. Ta metoda zwraca wartość null, jeśli nie wystąpił błąd serwera.

Poniższe metody SQLServerError klasy mogą służyć do uzyskania dodatkowych szczegółów dotyczących błędu wygenerowanego na serwerze.

  • SQLServerError.getErrorMessage() Zwraca komunikat o błędzie odebrany z serwera.

  • SQLServerError.getErrorNumber() Zwraca liczbę identyfikującą typ błędu.

  • SQLServerError.getErrorState() Zwraca kod błędu liczbowego z programu SQL Server, który reprezentuje błąd, ostrzeżenie lub komunikat "nie znaleziono danych".

  • SQLServerError.getErrorSeverity() Zwraca poziom ważności odebranego błędu.

  • SQLServerError.getServerName() Zwraca nazwę komputera, na którym uruchomiono wystąpienie programu SQL Server, które wygenerowało błąd.

  • SQLServerError.getProcedureName() Zwraca nazwę procedury składowanej lub zdalnego wywołania procedury (RPC), które wygenerowało błąd.

  • SQLServerError.getLineNumber() Zwraca numer wiersza w poleceniu wsadowym Transact-SQL lub procedurze składowanej, które wygenerowały błąd.

W następnym przykładzie do funkcji jest przekazywane otwarte połączenie z przykładową bazą danych SQL Server AdventureWorks2025, a nieprawidłowo sformułowana instrukcja SQL nie ma klauzuli FROM. Następnie instrukcja jest uruchamiana i jest przetwarzany wyjątek SQL.

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);
    }
}

Korzystanie z programu ServerMessageHandler

Począwszy od wersji 12.8.0, sterownik ma dodatkową ServerMessageHandler umożliwiającą większą kontrolę nad informacją zwrotną o błędach i ich rejestrowaniem. Aby można było używać elementu ServerMessageHandler, należy zaimplementować interfejs ISQLServerMessageHandler. Funkcje ServerMessageHandler obejmują:

Opinia o wiadomościach

Umożliwia otrzymywanie informacji zwrotnych od długotrwałych zapytań (takich jak komunikaty o postępie). Np. RAISERROR ('Progress message...', 0, 1) WITH NOWAIT.

Uniwersalne rejestrowanie błędów

Umożliwia obsłudze komunikatów rejestrowanie wszystkich błędów.

Uniwersalna obsługa błędów

Umożliwia umieszczenie logiki obsługi błędów w ServerMessageHandler, co eliminuje potrzebę powtarzania tej samej obsługi błędów w całej aplikacji.

Ponowne mapowanie ważności komunikatu o błędzie

Umożliwia rozpoznawanie i zmienianie ważności określonych komunikatów o błędach:

  • SQLServerError.toSQLServerInfoMessage() Zwraca wartość , utworzoną ISQLServerMessageprzez obniżenie poziomu komunikatu o błędzie do komunikatu z informacjami.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity) Zwraca wartość , utworzoną ISQLServerMessageprzez obniżenie poziomu komunikatu o błędzie do komunikatu z informacjami o nowej ważności błędu.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity, int newErrorNumber) Zwraca wartość , utworzoną ISQLServerMessageprzez obniżenie poziomu komunikatu o błędzie do komunikatu z informacjami z nową ważnością błędu i numerem błędu.

  • SQLServerInfoMessage.toSQLServerError() Zwraca element ISQLServerMessage, utworzony przez uaktualnienie komunikatu z informacjami do komunikatu o błędzie.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity) Zwraca element ISQLServerMessage, utworzony przez uaktualnienie komunikatu z informacjami do komunikatu o błędzie z nową ważnością błędu.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity, int newErrorNumber) Zwraca element ISQLServerMessage, utworzony przez uaktualnienie komunikatu z informacjami do komunikatu o błędzie z nową ważnością błędu i numerem błędu.

SQLExceptionChaining

Ponadto w wersji 12.8.0 można połączyć ze sobą wyjątki SQLExceptions, więc końcowy komunikat o wyjątku automatycznie zawiera wszystkie wyjątki, które mogły zostać utracone w inny sposób. Ten funkcjonalność jest włączona domyślnie.

Zobacz także

Diagnozowanie problemów ze sterownikiem JDBC