Setautocommit là gì

Để 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ằng cách 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 (commit) 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 solutions; //Bước 1: import các package cần thiết import java.sql.*; public class ViDuJDBC { // Tên của driver và địa chỉ URL của cơ sở dữ liệu (DB) static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost/sinhvien"; // Tên đăng nhập và mật khẩu của DB static final String USER = "root"; static final String PASS = ""; public static void main(String[] args) { Connection conn = null; Statement stmt = null; try { // Bước 2: Đăng ký Driver Class.forName(JDBC_DRIVER); // Bước 3: Mở một kết nối System.out.println("Đang kết ni ti cơ s d liu ..."); conn = DriverManager.getConnection(DB_URL, USER, PASS); // Bước 4: Thiết lập auto commit là false. conn.setAutoCommit(false); // Bước 5: Thực thi truy vấn System.out.println("To các lnh truy vn SQL ..."); stmt = conn.createStatement( ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); // Bước 6: Chèn một hàng vào bảng sinhvien System.out.println("\nChèn mt hàng ..."); String SQL = "INSERT INTO sinhvienk60 " + "VALUES (5, 'Trn Văn', 'Anh', 7.5)"; stmt.executeUpdate(SQL); // Bước 7: Chèn thêm một hàng vào bảng sinhvien SQL = "INSERT INTO sinhvienk60 " + "VALUES (6, 'Trương Vũ', 'Bình', 6.5)"; stmt.executeUpdate(SQL); // Bước 8: Ký thác (commit) các thay đổi System.out.println("\nKy thac cac thay doi ..."); conn.commit(); // Bước 9: Liệt kê tất cả các bản ghi. String sql = "SELECT mssv, ho, ten, diemthi FROM sinhvienk60"; ResultSet rs = stmt.executeQuery(sql); System.out.println("\nLDanh sách sinh viên:"); printRs(rs); // Bước 10: Dọn sạch môi trường và giải phóng tài nguyên (resource) rs.close(); stmt.close(); conn.close(); } catch (SQLException se) { // Xử lý các lỗi cho JDBC se.printStackTrace(); // Nếu xuất hiện lỗi thì xóa sạch các thay đổi // và trở về trạng thái trước khi có thay đổi. System.out.println("\nQuay v trng thái trước khi có s thay đi ..."); try { if (conn != null) conn.rollback(); } catch (SQLException se2) { se2.printStackTrace(); } } catch (Exception e) { // Xử lý các lỗi cho Class.forName e.printStackTrace(); } finally { // Khối finally được sử dụng để đóng các resource try { if (stmt != null) stmt.close(); } catch (SQLException se2) { } try { if (conn != null) conn.close(); } catch (SQLException se) { se.printStackTrace(); } } System.out.println("\nKết thúc!"); } public static void printRs(ResultSet rs) throws SQLException { // Đảm bảo ta đã bắt đầu từ hàng đầu tiên rs.beforeFirst(); while (rs.next()) { // Lấy dữ liệu thông qua truy xuất đến tên cột int mssv = rs.getInt("mssv"); int diemthi = rs.getInt("diemthi"); String ho = rs.getString("ho"); String ten = rs.getString("ten"); // Hiển thị các giá trị System.out.print("\nMSSV: " + mssv); System.out.print("\nH: " + ho); System.out.println("\nTên: " + ten); System.out.print("\nĐim thi: " + diemthi); System.out.print("\n================="); } System.out.println(); } }