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(); 19 conn.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 }
时间: 2024-10-11 01:11:45