JDBC事務開啟、事務提交、事務回滾 -- 轉賬演示
阿新 • • 發佈:2021-07-08
JDBC事務開啟、事務提交、事務回滾--轉賬演示
1、轉賬前:
2、程式碼:
package com.happy.lesson1; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; import java.util.ResourceBundle; //轉賬演示 public class JDBCTest11 { public static void main(String[] args) { ResourceBundle bundle = ResourceBundle.getBundle("JDBC"); String driver = bundle.getString("driver"); String url = bundle.getString("url"); String user = bundle.getString("user"); String password = bundle.getString("password"); Connection conn = null; PreparedStatement ps = null; int count = 0; try { //1.註冊驅動 Class.forName(driver); //2.獲取連線 conn = DriverManager.getConnection(url,user,password); //關閉自動提交(開啟事務) conn.setAutoCommit(false); //3.獲取資料庫操作物件 String sql = "update t_act set balance = ? where actno = ?";//處理sql語句 ps = conn.prepareStatement(sql); //傳值 //111轉賬10000元給222 ps.setDouble(1,10000); ps.setInt(2,111); //4.1執行sql count = ps.executeUpdate(); //發生異常 int e = 1/0; //222收到轉賬10000元 ps.setDouble(1,10000); ps.setInt(2,222); //4.2執行sql count += ps.executeUpdate(); //提交事務 conn.commit(); } catch (Exception e) { try { conn.rollback(); } catch (SQLException e1) { e1.printStackTrace(); } e.printStackTrace(); } finally { //5.處理結果集 System.out.println((count==2)?"轉賬成功":"轉賬失敗"); //6.關閉資源 try { if (ps != null){ ps.close(); } } catch (SQLException e) { e.printStackTrace(); } try { if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } }
3、執行程式碼,轉賬發生異常時
111的金額還是20000元,222金額還是0元,金額沒有因為異常而丟失,說明事務事件起了作用。
4、修復異常,再執行程式碼
idea軟體沒有報錯,資料庫資料也顯示正常,說明程式碼正常,轉賬成功!
5、改動了哪些地方
5.1 用try
因為發現發生異常後,後面的程式碼都無法執行了,例如發生異常後,後面的事務回滾也執行不到了
5.2 事務的3條重要程式碼
//關閉自動提交(開啟事務)
conn.setAutoCommit(false);
//提交事務
conn.commit();
//事務回滾
conn.rollback();
5.3 把處理結果集放到了finally
因為我想在控制檯看是否轉賬成功,無論是否發生異常。
5.4 提升作用域
Connection conn = null;
PreparedStatement ps = null;
int count = 0;
就是放在try的外面,讓finally也能訪問到
5.5 簡單的異常
//發生異常
int e = 1/0;
5.6 結果累加
count += ps.executeUpdate();
明確隻影響2條資料庫資料,以便更好的處理結果集