Bagikan melalui


Menangani kesalahan

Unduh driver JDBC

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 yang SQLServerError 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 , dibuat ISQLServerMessagedengan menurunkan tingkat pesan kesalahan ke pesan info.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity) mengembalikan , dibuat ISQLServerMessagedengan menurunkan tingkat pesan kesalahan ke pesan info, dengan tingkat keparahan kesalahan baru.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity, int newErrorNumber) mengembalikan , dibuat ISQLServerMessagedengan menurunkan tingkat pesan kesalahan ke pesan info, dengan tingkat keparahan kesalahan baru dan nomor kesalahan.

  • SQLServerInfoMessage.toSQLServerError() mengembalikan , dibuat ISQLServerMessagedengan memutakhirkan pesan info ke pesan kesalahan.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity) mengembalikan , dibuat ISQLServerMessagedengan memutakhirkan pesan info ke pesan kesalahan, dengan tingkat keparahan kesalahan baru.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity, int newErrorNumber)ISQLServerMessagemengembalikan , 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.

Lihat juga

Mendiagnosis masalah dengan driver JDBC