Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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()SQLServerErrorZwraca 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 elementISQLServerMessage, utworzony przez uaktualnienie komunikatu z informacjami do komunikatu o błędzie.SQLServerInfoMessage.toSQLServerError(int newErrorSeverity)Zwraca elementISQLServerMessage, 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 elementISQLServerMessage, 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.