JDBC处理事务

Transaction,一组操作同时成功或者失败,就是一个事务

  • 银行转账是事务最经典的一个例子,从这个里面我们可以理解事务有何作用,下面我们用代码来解决一下这个问题
  • 具体需求: A向B转账1000,成功后,A账户减1000,B账户加1000;如果失败则各自账户不变
String driverName = "oracle.jdbc.driver.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";
Connection conn = null;
Statement stmt = null;
preparedStatement pstmt = null;
Class.forName(driverName);
conn = DriverManager(url,user,password);
stmt = conn.createStatement();
//jdbc默认自动提交或回滚事务,这里要关闭自动处理事务,只要是在execute前设置就可以了
conn.setAutoCommit(false);
String sql1 = "update t_bankaccount set money = money-1000 where uName = 'A' ";
String sql2 = "update t_bankaccount set money = money+1000
where uName = 'B' ";
stmt.executeUpdate(sql1);
stmt.executeUpdate(sql2);
//下面注释的代码使用preparedStatement()实现事务
//String sql = "update t_bankaccount set money = money-? where uName = ?";
//conn.setAutoCommit(false);
//pstmt = conn.preparedStatement(sql);
//pstmt.setInt(1,1000);
//pstmt.setString(2,"A");
//pstmt.executeUpdate();
//pstmt.setInt(1,-1000);
//pstmt.setString(2,"B");
//pstmt.executeUpdate();
conn.commit();//当前面执行成功,手动提交事务
//然后在捕获的SQL异常里面加上自动回滚
conn.rollback();
//关闭资源
stmt.close();
//pstmt.close();
conn.close();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值