Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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()SQLServerErrorvrá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řenouISQLServerMessagedowngradová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íISQLServerMessagevytvoř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.