JDBC中Transaction的實現
阿新 • • 發佈:2017-06-22
方法 finall cep 手動 銀行 ive mit stat !=
Transaction(交易)問題指的是在銀行交易過程中,有兩方以上的數據庫要變動,這時候要求兩方數據庫同時做出改變。
mysql中默認commit方式為自動提交,因此實現這個問題的
第一步是調用Connection中的setAutoCommit(false)方法,將提交方式改為手動提交;
然後使用addBatch()方法,如果一方數據庫執行出現錯誤,調用用callBack()方法,確保多方數據庫同時變動
例:
1 import java.sql.*; 2 3 public class TestTransaction { 4 5 public static void main(String[] args) {6 Statement stmt = null; 7 Connection conn = null; 8 9 try { 10 Class.forName("com.mysql.jdbc.Driver"); 11 conn = DriverManager.getConnection("jdbc:mysql://localhost/mydata?user=username&password=pw&useSSL=false"); 12 13 conn.setAutoCommit(false); 14 stmt = conn.createStatement(); 15 stmt.addBatch("insert into dept values (1, ‘A‘, ‘A‘)"); 16 stmt.addBatch("insert into dept values (2, ‘B‘, ‘B‘)"); 17 stmt.addBatch("insert into dept values (3, ‘C‘, ‘C‘)"); 18 stmt.executeBatch(); 19conn.commit(); 20 conn.setAutoCommit(true); 21 } catch (ClassNotFoundException e) { 22 e.printStackTrace(); 23 } catch (SQLException e) { 24 e.printStackTrace(); 25 26 try { 27 if (conn != null) { 28 conn.rollback(); 29 conn.setAutoCommit(true); 30 } 31 } catch (SQLException e1) { 32 e1.printStackTrace(); 33 } 34 35 } finally { 36 try { 37 if (stmt != null) { 38 stmt.close(); 39 } 40 if (conn != null) { 41 conn.close(); 42 } 43 } catch (SQLException e) { 44 e.printStackTrace(); 45 } 46 } 47 48 } 49 50 }
JDBC中Transaction的實現