JDBC中Transaction的实现

本文介绍如何在MySQL中通过禁用自动提交并使用批量处理来管理事务,确保数据的一致性和完整性。示例代码演示了如何在遇到错误时回滚操作。

 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 }

 

转载于:https://www.cnblogs.com/lovechao/p/7062308.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值