Aracılığıyla paylaş


Hataları işleme

JDBC sürücüsünü indirin

SQL Server için Microsoft JDBC Sürücüsü kullanılırken, tüm veritabanı hata koşulları SQLServerException sınıfı kullanılarak özel durumlar olarak Java uygulamanıza döndürülür. SQLServerException sınıfının aşağıdaki yöntemleri java.sql.SQLException ve java.lang.Throwable'dan devralınır; ve oluşan SQL Server hatası hakkında belirli bilgileri döndürmek için kullanılabilir:

  • getSQLState() özel durumun standart X/Open veya SQL99 durum kodunu döndürür.

  • getErrorCode() belirli bir veritabanı hata numarasını döndürür.

  • getMessage() özel durumun tam metnini döndürür. Hata iletisi metni sorunu açıklar ve genellikle görüntülendiğinde hata iletisine eklenen nesne adları gibi bilgiler için yer tutucular içerir.

  • getSQLServerError() SQL Server'dan SQLServerError alınan özel durum hakkında ayrıntılı bilgi içeren nesneyi döndürür. Hiçbir sunucu hatası oluşmadıysa bu yöntem null döndürür.

Sınıfın aşağıdaki yöntemleri, sunucudan SQLServerError oluşturulan hata hakkında daha fazla ayrıntı elde etmek için kullanılabilir.

  • SQLServerError.getErrorMessage() sunucudan alınan hata iletisini döndürür.

  • SQLServerError.getErrorNumber() hatanın türünü tanımlayan bir sayı döndürür.

  • SQLServerError.getErrorState() SQL Server'dan bir hata, uyarı veya "veri bulunamadı" iletisini temsil eden sayısal bir hata kodu döndürür.

  • SQLServerError.getErrorSeverity() alınan hatanın önem derecesini döndürür.

  • SQLServerError.getServerName() , hatayı oluşturan bir SQL Server örneğini çalıştıran bilgisayarın adını döndürür.

  • SQLServerError.getProcedureName() , hatayı oluşturan saklı yordamın veya uzak yordam çağrısının (RPC) adını döndürür.

  • SQLServerError.getLineNumber() , hatayı oluşturan Transact-SQL komut toplu işleminin veya saklı yordamın içindeki satır numarasını döndürür.

Sonraki örnekte, SQL Server AdventureWorks2025 örnek veritabanına açık bir bağlantı işleve geçirilir ve FROM yan tümcesi olmayan hatalı biçimlendirilmiş bir SQL deyimi oluşturulur. Ardından deyimi çalıştırılır ve sql özel durumu işlenir.

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

ServerMessageHandler'i kullanma

Sürücü, 12.8.0 sürümünden itibaren hata geri bildirimi ve günlüğe kaydetme üzerinde daha fazla denetim sağlayan yeni bir ServerMessageHandler eklenmiştir. ServerMessageHandler kullanmak için, ISQLServerMessageHandler arabiriminin uygulanması gerekir. ServerMessageHandler özellikleri şunlardır:

İleti geri bildirimi

Uzun süre çalışan sorgulardan (ilerleme iletileri gibi) geri bildirim almanızı sağlar. Örneğin, RAISERROR ('Progress message...', 0, 1) WITH NOWAIT.

Evrensel hata günlüğü

İleti işleyicinizin tüm hataların kaydını tutmasına izin verir.

Evrensel hata işleme

Hata işleme mantığını yalnızca ServerMessageHandler yerine yerleştirmenize olanak tanır, bu sayede uygulamanız genelinde aynı hata işlemeyi tekrarlamanıza gerek kalmaz.

Hata iletisi ciddiyet derecesinin yeniden haritalanması

Belirli hata iletilerini tanımanıza ve önem derecesini değiştirmenize olanak tanır:

  • SQLServerError.toSQLServerInfoMessage(), bir hata mesajını bilgi mesajına indirerek oluşturulmuş bir ISQLServerMessage döndürür.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity), bir hata mesajını bilgi mesajına düşürerek oluşturulan ve yeni bir hata önem derecesi belirlenen bir ISQLServerMessage döndürür.

  • SQLServerError.toSQLServerInfoMessage(int newErrorSeverity, int newErrorNumber) bir hata mesajını, yeni bir hata önem derecesi ve hata numarası ile bilgi mesajına düşürerek oluşturulan bir ISQLServerMessage döndürür.

  • SQLServerInfoMessage.toSQLServerError() bir bilgi mesajını bir hata mesajına yükselterek oluşturulan ISQLServerMessage döndürür.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity) bir bilgi iletisini, hata önem derecesi yeni bir değer alacak şekilde bir hata iletisine yükselterek oluşturulan bir ISQLServerMessage döndürür.

  • SQLServerInfoMessage.toSQLServerError(int newErrorSeverity, int newErrorNumber) bir bilgi iletisini hata iletisine yükselterek, yeni bir hata önem derecesi ve hata numarasıyla oluşturulan bir ISQLServerMessage döndürür.

SQLExceptionZincirleme

Ayrıca 12.8.0 sürümüyle birlikte, SQLExceptions zincirlenebilir, bu nedenle son istisna mesajı otomatik olarak başka türlü kaybolabilecek tüm istisnaları içerir. Bu özellik varsayılan olarak etkindir.

Ayrıca bakınız

JDBC sürücüsüyle ilgili sorunları tanılama