首页 > 代码库 > JDBC中Transaction的实现

JDBC中Transaction的实现

 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 }

 

JDBC中Transaction的实现