JDBC - İstisnaları İşleme

İstisna işleme, program tanımlı hatalar gibi istisnai koşulları kontrollü bir şekilde işlemenizi sağlar.

Bir istisna durumu oluştuğunda, bir istisna atılır. Atılan terim, geçerli program yürütmesinin durduğu ve denetimin en yakın uygulanabilir catch cümlesine yeniden yönlendirildiği anlamına gelir. Geçerli bir catch cümlesi yoksa, programın çalışması sona erer.

JDBC İstisnası işleme, Java İstisnası işlemeye çok benzer, ancak JDBC için, ilgileneceğiniz en yaygın istisna, java.sql.SQLException.

SQLException Yöntemleri

Hem sürücüde hem de veritabanında bir SQLException oluşabilir. Böyle bir istisna oluştuğunda, SQLException türünde bir nesne catch yan tümcesine geçirilecektir.

Aktarılan SQLException nesnesi, istisna hakkında ek bilgi almak için aşağıdaki yöntemlere sahiptir:

Yöntem Açıklama
getErrorCode () Özel durumla ilişkili hata numarasını alır.
getMessage () JDBC sürücüsünün hata mesajını, sürücü tarafından işlenen veya bir veritabanı hatası için Oracle hata numarasını ve mesajını alır.
getSQLState () XOPEN SQLstate dizesini alır. JDBC sürücü hatası için, bu yöntemden yararlı bilgiler döndürülmez. Veritabanı hatası için beş basamaklı XOPEN SQLstate kodu döndürülür. Bu yöntem null döndürebilir.
getNextException () İstisna zincirindeki bir sonraki Exception nesnesini alır.
Yığın İzi yazdır( ) Geçerli istisnayı veya atılabilirliği yazdırır ve standart bir hata akışına geri izini sürer.
printStackTrace (PrintStream ler) Bu atılabilirliği ve geri izini belirttiğiniz yazdırma akışına yazdırır.
printStackTrace (PrintWriter w) Bu atılabilirliği yazdırır ve belirttiğiniz yazıcı yazıcıya geri izini sürer.

Exception nesnesindeki bilgileri kullanarak, bir istisnayı yakalayabilir ve programınıza uygun şekilde devam edebilirsiniz. İşte bir deneme bloğunun genel biçimi -

try {
   // Your risky code goes between these curly braces!!!
}
catch(Exception ex) {
   // Your exception handling code goes between these 
   // curly braces, similar to the exception clause 
   // in a PL/SQL block.
}
finally {
   // Your must-always-be-executed code goes between these 
   // curly braces. Like closing database connection.
}

Misal

Kullanımını anlamak için aşağıdaki örnek kodu inceleyin try....catch...finally bloklar.

//STEP 1. Import required packages
import java.sql.*;

public class JDBCExample {
   // JDBC driver name and database URL
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/EMP";

   //  Database credentials
   static final String USER = "username";
   static final String PASS = "password";
   
   public static void main(String[] args) {
   Connection conn = null;
   try{
      //STEP 2: Register JDBC driver
      Class.forName("com.mysql.jdbc.Driver");

      //STEP 3: Open a connection
      System.out.println("Connecting to database...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      //STEP 4: Execute a query
      System.out.println("Creating statement...");
      Statement stmt = conn.createStatement();
      String sql;
      sql = "SELECT id, first, last, age FROM Employees";
      ResultSet rs = stmt.executeQuery(sql);

      //STEP 5: Extract data from result set
      while(rs.next()){
         //Retrieve by column name
         int id  = rs.getInt("id");
         int age = rs.getInt("age");
         String first = rs.getString("first");
         String last = rs.getString("last");

         //Display values
         System.out.print("ID: " + id);
         System.out.print(", Age: " + age);
         System.out.print(", First: " + first);
         System.out.println(", Last: " + last);
      }
      //STEP 6: Clean-up environment
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      //Handle errors for JDBC
      se.printStackTrace();
   }catch(Exception e){
      //Handle errors for Class.forName
      e.printStackTrace();
   }finally{
      //finally block used to close resources
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }//end finally try
   }//end try
   System.out.println("Goodbye!");
}//end main
}//end JDBCExample

Şimdi yukarıdaki örneği şu şekilde derleyelim -

C:\>javac JDBCExample.java
C:\>

Koştuğun zaman JDBCExample, sorun yoksa aşağıdaki sonucu verir, aksi takdirde ilgili hata yakalanır ve hata mesajı görüntülenir -

C:\>java JDBCExample
Connecting to database...
Creating statement...
ID: 100, Age: 18, First: Zara, Last: Ali
ID: 101, Age: 25, First: Mahnaz, Last: Fatma
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

Yanlış veritabanı adı veya yanlış kullanıcı adı veya şifre girerek yukarıdaki örneği deneyin ve sonucu kontrol edin.