數據庫學習筆記二十二 —— JDBC操作事務
事務相關的詳細博客 https://blog.csdn.net/qq_43594119/article/details/106035815
代碼中用到的 JdbcUtils 類詳見博客 https://blog.csdn.net/qq_43594119/article/details/106049749 中的提取工具類
package pers.ylw.lesson04;
import pers.ylw.lesson02.utils.JdbcUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class TestTransaction01 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement st = null;
ResultSet rs = null;
try{
conn = JdbcUtils.getConnection();
// 關閉數據庫的自動提交功能,同時自己會開啓事務,不需要像在SQL裏那樣寫開啓事務了
conn.setAutoCommit(false); //同時會自動開啓事務
String sql01 = "update account set money = money-100 where name = 'A'";
st = conn.prepareStatement(sql01);
st.executeUpdate();
//模擬中途失敗,測試後發現第一個SQL語句也沒有執行成功,說明事務的好處
//int x = 1/0;
String sql02 = "update account set money = money+100 where name = 'B'";
st = conn.prepareStatement(sql02);
st.executeUpdate();
//業務完畢,提交事務
conn.commit();
System.out.println("操作成功");
} catch (SQLException e){
//不寫回滾,失敗也會默認回滾,但最好寫上
try {
conn.rollback();//如果發生異常就回滾
} catch (SQLException e1) {
e1.printStackTrace();
}
e.printStackTrace();
} finally {
JdbcUtils.release(conn,st,rs);
}
}
}