Menangani kesalahan
Saat menggunakan Driver Microsoft JDBC untuk SQL Server, semua kondisi kesalahan database dikembalikan ke aplikasi Java Anda sebagai pengecualian menggunakan kelas SQLServerException . Metode kelas SQLServerException berikut diwarisi dari java.sql.SQLException dan java.lang.Throwable; dan mereka dapat digunakan untuk mengembalikan informasi spesifik tentang kesalahan SQL Server yang telah terjadi:
getSQLState()
mengembalikan kode status X/Open atau SQL99 standar dari pengecualian.getErrorCode()
mengembalikan nomor kesalahan database tertentu.getMessage()
mengembalikan teks lengkap pengecualian. Teks pesan kesalahan menjelaskan masalah, dan sering menyertakan tempat penampung untuk informasi, seperti nama objek, yang disisipkan dalam pesan kesalahan saat ditampilkan.getSQLServerError()
mengembalikan objek yangSQLServerError
berisi info terperinci tentang pengecualian seperti yang diterima dari SQL Server. Metode ini mengembalikan null jika tidak ada kesalahan server yang terjadi.
Metode SQLServerError
kelas berikut dapat digunakan untuk mendapatkan detail selengkapnya tentang kesalahan yang dihasilkan dari server.
SQLServerError.getErrorMessage()
mengembalikan pesan kesalahan seperti yang diterima dari server.SQLServerError.getErrorNumber()
mengembalikan angka yang mengidentifikasi jenis kesalahan.SQLServerError.getErrorState()
mengembalikan kode kesalahan numerik dari SQL Server yang mewakili pesan kesalahan, peringatan, atau "tidak ada data yang ditemukan".SQLServerError.getErrorSeverity()
mengembalikan tingkat keparahan kesalahan yang diterima.SQLServerError.getServerName()
mengembalikan nama komputer yang menjalankan instans SQL Server yang menghasilkan kesalahan.SQLServerError.getProcedureName()
mengembalikan nama prosedur tersimpan atau panggilan prosedur jarak jauh (RPC) yang menghasilkan kesalahan.SQLServerError.getLineNumber()
mengembalikan nomor baris dalam batch perintah Transact-SQL atau prosedur tersimpan yang menghasilkan kesalahan.
Dalam contoh berikutnya, koneksi terbuka ke database sampel SQL Server AdventureWorks2022 diteruskan ke fungsi dan pernyataan SQL yang salah bentuk dibuat yang tidak memiliki klausa FROM. Kemudian, pernyataan dijalankan dan pengecualian SQL diproses.
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);
}
}
Menggunakan ServerMessageHandler
Mulai dari rilis 12.8.0, driver memiliki tambahan ServerMessageHandler
yang memungkinkan kontrol yang lebih besar atas umpan balik kesalahan dan pengelogan. Untuk menggunakan ServerMessageHandler
, seseorang perlu mengimplementasikan ISQLServerMessageHandler
antarmuka. Fitur meliputi ServerMessageHandler
:
Memberikan tanggapan
Memungkinkan Anda menerima umpan balik dari kueri yang berjalan lama (seperti pesan kemajuan). Misalnya, RAISERROR ('Progress message...', 0, 1) WITH NOWAIT
.
Pengelogan kesalahan universal
Memungkinkan handler pesan Anda menangani pengelogan untuk semua kesalahan.
Penanganan kesalahan universal
Memungkinkan Anda menempatkan logika penanganan kesalahan hanyalah ServerMessageHandler
, dibandingkan dengan mengulangi penanganan kesalahan yang sama di seluruh aplikasi Anda.
Pemetaan ulang tingkat keparahan pesan kesalahan
Memungkinkan Anda mengenali, dan mengubah tingkat keparahan pesan kesalahan tertentu:
SQLServerError.toSQLServerInfoMessage()
mengembalikan , dibuatISQLServerMessage
dengan menurunkan tingkat pesan kesalahan ke pesan info.SQLServerError.toSQLServerInfoMessage(int newErrorSeverity)
mengembalikan , dibuatISQLServerMessage
dengan menurunkan tingkat pesan kesalahan ke pesan info, dengan tingkat keparahan kesalahan baru.SQLServerError.toSQLServerInfoMessage(int newErrorSeverity, int newErrorNumber)
mengembalikan , dibuatISQLServerMessage
dengan menurunkan tingkat pesan kesalahan ke pesan info, dengan tingkat keparahan kesalahan baru dan nomor kesalahan.SQLServerInfoMessage.toSQLServerError()
mengembalikan , dibuatISQLServerMessage
dengan memutakhirkan pesan info ke pesan kesalahan.SQLServerInfoMessage.toSQLServerError(int newErrorSeverity)
mengembalikan , dibuatISQLServerMessage
dengan memutakhirkan pesan info ke pesan kesalahan, dengan tingkat keparahan kesalahan baru.SQLServerInfoMessage.toSQLServerError(int newErrorSeverity, int newErrorNumber)
ISQLServerMessage
mengembalikan , dibuat dengan memutakhirkan pesan info ke pesan kesalahan, dengan tingkat keparahan kesalahan baru dan nomor kesalahan.
SQLExceptionChaining
Juga dengan rilis 12.8.0, SQLExceptions dapat dirangkai bersama-sama, sehingga pesan pengecualian akhir secara otomatis berisi semua pengecualian yang mungkin telah hilang. Fitur ini diaktifkan secara default.