Ví dụ về Commit và Rollback trong JDBC



Như trong chương trước đã giới thiệu, để thực hiện quản lý Transaction cho riêng mình, đầu tiên bạn cần tắt chế độ auto-commit bởi truyền tham số false cho phương thức setAutoCommit().

Sau đó, khi bạn đã thực hiện các thay đổi với cơ sở dữ liệu và muốn ký thác các thay đổi đó, bạn sử dụng phương thức commit(). Hoặc bạn muốn xóa các thay đổi đã được thực hiện trước đó để quay về trạng thái trước khi thực hiện thay đổi khi thấy rằng có lỗi xảy ra, bạn sử dụng phương thức rollback().

Dưới đây là ví dụ minh họa cho hai hoạt động trên.

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;
   Statement stmt = 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: Thiet lap auto commit la false.
      conn.setAutoCommit(false);

      // Buoc 5: Thuc thi truy van
      System.out.println("Tao cac lenh truy van SQL ...");
      stmt = conn.createStatement(
                           ResultSet.TYPE_SCROLL_INSENSITIVE,
                           ResultSet.CONCUR_UPDATABLE);
     
      // Buoc 6: Chen mot hang vao trong bang sinhvienk60
      System.out.println("\nChen mot hang ...");
      String SQL = "INSERT INTO sinhvienk60 " +
                    "VALUES (5, 'Tran Hung', 'Cuong', 7.5)";
      stmt.executeUpdate(SQL);  

      // Buoc 7: Chen them mot hang vao trong bang sinhvienk60
      SQL = "INSERT INTO sinhvienk60 " +
                    "VALUES (6, 'Vu Ngoc', 'Phan', 6.5)";
      stmt.executeUpdate(SQL);

      // Buoc 8: Ky thac cac thay doi.
      System.out.println("\nKy thac cac thay doi ...");
      conn.commit();
	  
	  // Buoc 9: Liet ke tat ca cac ban ghi.
      String sql = "SELECT mssv, ho, ten, diemthi FROM sinhvienk60";
      ResultSet rs = stmt.executeQuery(sql);
      System.out.println("\nLiet ke result set de tham chieu ...");
      printRs(rs);

      // Buoc 10: 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();
      // Neu xuat hien loi thi xoa sach cac thay doi
      // va tro ve trang thai truoc khi co thay doi.
      System.out.println("\nQuay ve trang thai truoc thay doi ...");
	  try{
		 if(conn!=null)
            conn.rollback();
      }catch(SQLException se2){
         se2.printStackTrace();
      }// Ket thuc khoi try

   }catch(Exception e){
      // Xu ly cac loi cho Class.forName
      e.printStackTrace();
   }finally{
      // Khoi finally duoc su dung de dong cac resource
      try{
         if(stmt!=null)
            stmt.close();
      }catch(SQLException se2){
      } 
      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

   public static void printRs(ResultSet rs) throws SQLException{
      // Bao dam chung ta da bat dau tu hang dau tien
      rs.beforeFirst();
      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=================");
     }
     System.out.println();
   }// Ket thuc printRs()
}// Ket thuc ViDuJDBC
Quảng cáo

Bạn sao chép, dán và lưu ví dụ trong ViDuJDBC.java, sau đó chạy chương trình Java trên sẽ cho kết quả:

Ví dụ Commit và Rollback trong JDBC Ví dụ Commit và Rollback 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 Java. Khóa học có giá chỉ 300K, 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 a Tuyền, cựu sinh viên Bách Khoa K53, fb: https://www.facebook.com/tuyen.vietjack

Follow facebook cá nhân Nguyễn Thanh Tuyền https://www.facebook.com/tuyen.vietjack để tiếp tục theo dõi các loạt bài mới nhất về Java,C,C++,Javascript,HTML,Python,Database,Mobile.... mới nhất của chúng tôi.



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


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