Zpracování chyb

Stáhnout ovladač JDBC

Při použití ovladače Microsoft JDBC pro SQL Server se všechny chybové podmínky databáze vrátí do vaší aplikace Java jako výjimky pomocí třídy SQLServerException . Následující metody třídy SQLServerException jsou zděděné z java.sql.SQLException a java.lang.Throwable; a dají se použít k vrácení konkrétních informací o chybě SQL Serveru, ke které došlo:

  • getSQLState() vrátí standardní stavový kód X/Open nebo SQL99 výjimky.

  • getErrorCode() vrátí konkrétní číslo chyby databáze.

  • getMessage() vrátí úplný text výjimky. Text chybové zprávy popisuje problém a často obsahuje zástupné symboly informací, jako jsou názvy objektů, které se při zobrazení vloží do chybové zprávy.

  • getSQLServerError() SQLServerError vrátí objekt obsahující podrobné informace o výjimce přijaté z SQL Serveru. Tato metoda vrátí hodnotu null, pokud nedošlo k chybě serveru.

Následující metody SQLServerError třídy lze použít k získání dalších podrobností o chybě vygenerované ze serveru.

  • SQLServerError.getErrorMessage() vrátí chybovou zprávu, která byla přijata ze serveru.

  • SQLServerError.getErrorNumber() vrátí číslo, které identifikuje typ chyby.

  • SQLServerError.getErrorState() vrátí číselný kód chyby z SQL Serveru, který představuje chybu, upozornění nebo zprávu "Nebyla nalezena žádná data".

  • SQLServerError.getErrorSeverity() vrátí úroveň závažnosti přijaté chyby.

  • SQLServerError.getServerName() vrátí název počítače, na kterém je spuštěna instance SYSTÉMU SQL Server, která chybu vygenerovala.

  • SQLServerError.getProcedureName() vrátí název uložené procedury nebo vzdálené volání procedur (RPC), která vygenerovala chybu.

  • SQLServerError.getLineNumber() vrátí číslo řádku v rámci dávky příkazu Transact-SQL nebo uložené procedury, která vygenerovala chybu.

V dalším příkladu se do funkce předá otevřené připojení k ukázkové databázi SQL Server AdventureWorks2025 a vytvoří se poškozený příkaz SQL, který neobsahuje klauzuli FROM. Pak se příkaz spustí a zpracuje se výjimka 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);
    }
}

Použití ServerMessageHandler

Od verze 12.8.0 má ovladač nový prvek ServerMessageHandler, který umožňuje lepší kontrolu nad zpětnou vazbou o chybách a jejich protokolováním. Aby bylo možné použít ServerMessageHandler, je třeba implementovat rozhraní ISQLServerMessageHandler. Mezi tyto funkce ServerMessageHandler patří:

Zpětná vazba ke zprávě

Umožňuje přijímat zpětnou vazbu z dlouhotrvajících dotazů (například zpráv o průběhu). Např. RAISERROR ('Progress message...', 0, 1) WITH NOWAIT

Univerzální protokolování chyb

Umožňuje vašemu zpracovateli zpráv logování všech chyb.

Univerzální zpracování chyb

Umožňuje umístit logiku pro zpracování chyb pouze na jedno místo, a to na rozdíl od opakovaného používání stejného zpracování chyb v celé aplikaci.

Přemapování závažnosti chybové zprávy

Umožňuje rozpoznat a změnit závažnost konkrétních chybových zpráv:

  • SQLServerError.toSQLServerInfoMessage() vrátí ISQLServerMessage, vytvořenou převedením chybové zprávy na informační zprávu.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity) vrátí hodnotu , ISQLServerMessagevytvořenou downgradováním chybové zprávy na informační zprávu s novou závažností chyby.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity, int newErrorNumber) vrátí chybu vytvořenou ISQLServerMessagedowngradováním chybové zprávy na informační zprávu s novou závažností chyby a číslem chyby.

  • SQLServerInfoMessage.toSQLServerError() vrátí ISQLServerMessage, vytvořenou upgradem informační zprávy na chybovou zprávu.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity) vrátí ISQLServerMessage, která je vytvořena převedením informační zprávy na chybovou zprávu s novou úrovní závažnosti chyby.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity, int newErrorNumber) vrátí ISQLServerMessage vytvořený upgradováním informační zprávy na chybovou zprávu, s novou závažností chyby a číslem chyby.

SQLExceptionChaining

U verze 12.8.0 lze také zřetězit výjimky SQLExceptions, takže konečná zpráva o výjimkách automaticky obsahuje všechny výjimky, které mohou být jinak ztraceny. Tato funkce je ve výchozím nastavení povolena.

Viz také

Diagnostika problémů s ovladačem JDBC