SQLException: Xử lý ngoại lệ trong JDBC



Ngoại lệ (Exception) là một tình trạng bất thường xảy ra trong khi thực thi chương trình và Xử lý ngoại lệ (Exception Handling) giúp bạn xử lý các điều kiện bất thường này.

Lớp SQLException trong JDBC

Trong JDBC, lớp java.sql.SQLException cung cấp rất nhiều phương thức để xử lý các ngoại lệ xảy ra cho cả Driver và Database. Đây là một trong các lớp cơ bản của JDBC, và chịu trách nhiệm về xử lý các ngoại lệ.

Khi một điều kiện bất thường xuất hiện, một Exception được ném. Khái niệm ném (thrown) ở đây nghĩa là sự thực thi chương trình hiện tại dừng lại và luồng điều khiển được chuyển tiếp tới mệnh đề catch gần nhất. Nếu không có mệnh đề catch nào, thì sự thực thi chương trình kết thúc.

Dưới đây là các phương thức của đối tượng SQLException để cung cấp thông tin về Exception:

1. public String getSQLState()

Lấy SQL State cho đối tượng SQLException này. Với một lỗi liên quan tới Driver, thì phương thức này không trả về thông tin hữu ích nào. Tuy nhiên, với một lỗi liên quan tới Database, một code gồm 5 chữ số miêu tả về XOPEN SQLstate được trả về. Phương thức này có thể trả về null.

2. public int getErrorCode()

Trả về số hiệu lỗi liên kết với Exception đó.

3. public SQLException getNextException()

Lấy đối tượng Exception tiếp theo trong Exception Chain được thiết lập bởi phương thức setNextException.

Quảng cáo

4. public void setNextException(SQLException ex)

Thêm một đối tượng SQLException tới phần cuối của Chain.

5. public Iterator<Throwable> iterator()

Trả về một iterator qua dãy các SQLException. Iterator này sẽ lặp qua mỗi SQLException và nguyên nhân gây ra ngoại lệ đó.

6. public void printStackTrace()

In ngoại lệ hiện tại và backtrace của nó tới luồng lỗi chuẩn (Standard Error Stream).

7. public void printStackTrace(PrintStream s)

In ngoại lệ này và backtrace của nó tới Print Stream bạn đã xác định.

Bằng việc lợi dụng thông tin từ các phương thức trên, bạn có thể bắt một Exception và tiếp tục thực thi chương trình một cách thích hợp. Dưới đây là form chung của một khối try-catch-finally:

try {
   // Phan code ma ban nghi ngo rang se xuat hien loi nen dat o day!!!
}
catch(Exception ex) {
   // Ban xu ly ngoai le tai day
}
finally {
   // Phan code nay luon duoc thuc thi
}
Quảng cáo

Ví dụ về xử lý ngoại lệ trong JDBC

Dưới đây là ví dụ minh họa cách sử dụng của khối try-catch-finally và cách sử dụng các phương thức trên để xử lý ngoại lệ.

package com.vietjack.jdbc; 

//Buoc 1: Ban can inport cac package can thiet
import java.sql.*;

public class ViDuJDBC {
   // Ten cua driver va dia chi URL cua co so du lieu
   static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
   static final String DB_URL = "jdbc:mysql://localhost/sinhvien";

   //  Ten nguoi dung va mat khau cua co so du lieu
   static final String USER = "root";
   static final String PASS = "123456";
   
   public static void main(String[] args) {
   Connection conn = null;
   try{
      // Buoc 2: Dang ky Driver
      Class.forName("com.mysql.jdbc.Driver");

      // Buoc 3: Mo mot ket noi
      System.out.println("Dang ket noi toi co so du lieu ...");
      conn = DriverManager.getConnection(DB_URL,USER,PASS);

      // Buoc 4: Thuc thi truy van
      System.out.println("Tao cac lenh truy van SQL ...");
      Statement stmt = conn.createStatement();
      String sql;
      sql = "SELECT mssv, ho, ten, diemthi FROM sinhvienk60";
      ResultSet rs = stmt.executeQuery(sql);

      // Buoc 5: Lay du lieu tu Result Set
      while(rs.next()){
         // Lay du lieu boi su dung ten cot
         int mssv  = rs.getInt("mssv");
         int diemthi = rs.getInt("diemthi");
         String ho = rs.getString("ho");
         String ten = rs.getString("ten");

         // Hien thi cac gia tri
       System.out.print("\nMSSV: " + mssv);
       System.out.print("\nHo: " + ho);
       System.out.println("\nTen: " + ten);
       System.out.print("\nDiem Thi: " + diemthi);
       System.out.print("\n=================");
      }
      // Buoc 6: Don sach moi truong va giai phong resource
      rs.close();
      stmt.close();
      conn.close();
   }catch(SQLException se){
      // Xu ly cac loi cho JDBC
      se.printStackTrace();
   }catch(Exception e){
      // Xu ly cac loi cho Class.forName
      e.printStackTrace();
   }finally{
      // Khoi finally duoc su dung de dong cac resource
      try{
         if(conn!=null)
            conn.close();
      }catch(SQLException se){
         se.printStackTrace();
      }// Ket thuc khoi finally
   }// Ket thuc khoi try
   System.out.println("\nVietJack chuc cac ban hoc tot!");
}// Ket thuc main
}// Ket thuc ViDuJDBC

Sao chép và dán ví dụ trên trong ViDuJDBC.java, sau đó biên dịch và thực thi chương trình Java trên. Nếu không có vấn đề gì xảy ra, chương trình trên sẽ cho kết quả như sau. Nếu có bất kỳ lỗi nào, thì chương trình sẽ bắt và hiển thị thông báo tương ứng về lỗi đó.

Xử lý ngoại lệ trong JDBC

Bạn thử lại ví dụ trên bởi cung cấp sai tên database hoặc username hoặc sai password, sau đó kiểm tra kết quả. Chẳng hạn, khi mình cung cấp mật khẩu là 123455, thì khi chạy chương trình trên sẽ cho kết quả dạng:

Xử lý ngoại lệ trong JDBC

Đã có app VietJack trên điện thoại, giải bài tập SGK, SBT Soạn văn, Văn mẫu, Thi online, Bài giảng....miễn phí. Tải ngay ứng dụng trên Android và iOS.

Theo dõi chúng tôi miễn phí trên mạng xã hội facebook và youtube:

Các bạn có thể mua thêm khóa học JAVA CORE ONLINE VÀ ỨNG DỤNG cực hay, giúp các bạn vượt qua các dự án trên trường và đi thực tập doanh nghiệp với Java. Khóa học có giá chỉ 400K, nhằm ưu đãi, tạo điều kiện cho sinh viên cho thể mua khóa học.

Nội dung khóa học gồm 16 chuơng và 100 video cực hay, học trực tiếp tại https://www.udemy.com/tu-tin-di-lam-voi-kien-thuc-ve-java-core-toan-tap/ Bạn nào có nhu cầu mua, inbox trực tiếp chị Thu, trợ lý anh Tuyền để hỗ trợ thanh toán qua mã QR ngân hàng Việt Nam, fb: https://www.facebook.com/Thule.59

Anh Tuyền, tác giả khóa học, là cựu sinh viên chương trình đào tạo kĩ sư tài năng của đại học Bách Khoa Hà Nội với hơn 5 năm kinh nghiệm đi làm thực tế doanh nghiệp và cũng là Founder website vietjack.com, web giáo dục phổ biến nhất Việt Nam hiện tại (năm 2024). Java cũng là ngôn ngữ lập trình dễ đi xin việc nhất hiện tại, với mức lương cao, hãy nâng cao kiến thức IT của bản thân mình vì một Việt Nam giàu mạnh.

Loạt bài hướng dẫn của chúng tôi dựa một phần trên nguồn tài liệu của: Tutorialspoint.com



Demo một bài giảng trong khóa học online tại vietjackteam.


Tài liệu giáo viên