Hibák kezelése

JDBC-illesztőprogram letöltése

Az SQL Serverhez készült Microsoft JDBC-illesztőprogram használatakor a rendszer kivételként az SQLServerException osztály használatával visszaadja az adatbázis-hibafeltételeket a Java-alkalmazásnak. Az SQLServerException osztály alábbi metódusai a java.sql.SQLException és a java.lang.Throwable osztályból származnak, és felhasználhatók arra, hogy konkrét információkat nyújtsanak a bekövetkezett SQL Server-hibáról.

  • getSQLState() A kivétel szabványos X/Open vagy SQL99 állapotkódját adja vissza.

  • getErrorCode() A megadott adatbázis-hibaszámot adja vissza.

  • getMessage() A kivétel teljes szövegét adja vissza. A hibaüzenet szövege leírja a problémát, és gyakran tartalmaz helyőrzőket az olyan információkhoz, például az objektumnevekhez, amelyeket a hibaüzenetbe beszúrnak, amikor az megjelenik.

  • getSQLServerError() Az SQLServerError SQL Servertől kapott kivétel részletes adatait tartalmazó objektumot adja vissza. Ez a metódus null értéket ad vissza, ha nem történt kiszolgálóhiba.

Az osztály alábbi metódusaival SQLServerError további részleteket kaphat a kiszolgálóról generált hibáról.

  • SQLServerError.getErrorMessage() a kiszolgálótól kapott hibaüzenetet adja vissza.

  • SQLServerError.getErrorNumber() A hiba típusát azonosító számot ad vissza.

  • SQLServerError.getErrorState() Az SQL Server egy numerikus hibakódot ad vissza, amely hibaüzenetet, figyelmeztetést vagy "nem található adat" üzenetet jelenít meg.

  • SQLServerError.getErrorSeverity() A kapott hiba súlyossági szintjét adja vissza.

  • SQLServerError.getServerName() A hibát létrehozó SQL Server-példányt futtató számítógép nevét adja vissza.

  • SQLServerError.getProcedureName() A hibát létrehozó tárolt eljárás vagy távoli eljáráshívás (RPC) nevét adja vissza.

  • SQLServerError.getLineNumber() A hibát okozó Transact-SQL parancsköteg vagy tárolt eljárás sorszámát adja vissza.

A következő példában az SQL Server AdventureWorks2025 mintaadatbázishoz való nyílt kapcsolat lesz átadva a függvénynek, és létrejön egy hibásan formázott SQL-utasítás, amely nem rendelkezik FROM záradékkal. Ezután a rendszer futtatja az utasítást, és feldolgoz egy SQL-kivételt.

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

A "ServerMessageHandler" használata

A 12.8.0-s kiadástól kezdve az illesztőprogramba egy új komponens került hozzáadásra, amely lehetővé teszi a hibavisszajelzések és a naplózás alaposabb szabályozását. A ServerMessageHandler használatához implementálnia kell a ISQLServerMessageHandler interfészt. A ServerMessageHandler jellemzői a következők:

Üzenetvisszajelzés

Lehetővé teszi, hogy visszajelzést kapjon a hosszú ideig futó lekérdezésektől (például az előrehaladási üzenetektől). Például. RAISERROR ('Progress message...', 0, 1) WITH NOWAIT

Univerzális hibanaplózás

Lehetővé teszi, hogy az üzenetkezelő kezelje az összes hiba naplózását.

Univerzális hibakezelés

Lehetővé teszi, hogy a hibakezelési logikát a ServerMessageHandler-be helyezze, szemben azzal, hogy ugyanazt a hibakezelést ismételje az alkalmazásában.

A hibaüzenet súlyosságának átsorolása

Lehetővé teszi adott hibaüzenetek felismerését és súlyosságának módosítását:

  • SQLServerError.toSQLServerInfoMessage() egy hibaüzenet információs üzenetre való visszaminősítésével létrehozott ISQLServerMessage-t ad vissza.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity) egy ISQLServerMessage objektumot ad vissza, amelyet úgy hoztak létre, hogy egy hibaüzenetet információs üzenetté minősítettek vissza, új hiba súlyossági szinttel.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity, int newErrorNumber) egy ISQLServerMessage értéket ad vissza, amelyet a hibaüzenet információs üzenetre való visszaminősítése során hoztak létre, egy új hiba súlyossággal és hibaszámmal.

  • SQLServerInfoMessage.toSQLServerError() egy, egy információs üzenet hibaüzenetté való frissítésével létrehozott ISQLServerMessage-t ad vissza.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity) egy ISQLServerMessage-t ad vissza, amelyet úgy hoztak létre, hogy egy információs üzenetet hibaüzenetre frissítettek egy új hiba súlyossággal.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity, int newErrorNumber) egy ISQLServerMessageinformációs üzenet hibaüzenetre való frissítésével létrehozott, új hiba súlyosságú és hibaszámú értéket ad vissza.

SQLExceptionChaining

A 12.8.0-s kiadással az SQLExceptions összefűzhető, így a végső kivételüzenet automatikusan tartalmazza az összes kivételt, amelyek egyébként elveszhettek volna. Alapértelmezetten ez a funkció engedélyezett.

Lásd még

A JDBC-illesztővel kapcsolatos problémák diagnosztizálása