一、概述
1. 事務:一個包含多個步驟的業務操作。如果這個業務操作被事務管理,則這多個步驟要么同時成功,要么同時失敗。 2. 操作: 1. 開啟事務 2. 提交事務 3. 回滾事務 3. 使用Connection對象來管理事務 * 開啟事務:setAutoCommit(boolean autoCommit) :調用該方法設置參數為false,即開啟事務 * 在執行sql之前開啟事務 * 提交事務:commit() * 當所有sql都執行完提交事務 * 回滾事務:rollback() * 在catch中回滾事務
二、代碼
public class JDBCDemo10 { public static void main(String[] args) { Connection conn = null; PreparedStatement pstmt1 = null; PreparedStatement pstmt2 = null; try { //1.獲取連接 conn = JDBCUtils.getConnection(); //開啟事務 conn.setAutoCommit(false); //2.定義sql //2.1 張三 - 500 String sql1 = "update account set balance = balance - ? where id = ?"; //2.2 李四 + 500 String sql2 = "update account set balance = balance + ? where id = ?"; //3.獲取執行sql對象 pstmt1 = conn.prepareStatement(sql1); pstmt2 = conn.prepareStatement(sql2); //4. 設置參數 pstmt1.setDouble(1,500); pstmt1.setInt(2,1); pstmt2.setDouble(1,500); pstmt2.setInt(2,2); //5.執行sql pstmt1.executeUpdate(); // 手動制造異常 int i = 3/0; pstmt2.executeUpdate(); //提交事務 conn.commit(); } catch (Exception e) { //事務回滾 try { if(conn != null) { conn.rollback(); } } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); }finally { JDBCUtils.close(pstmt1,conn); JDBCUtils.close(pstmt2,null); }
