JDBC学习之路(六)事务的概念和处理

数据库的操作对事务这一概念非常重要,事务的概念是一个不可分割的整体,具有原子性。比如银行转账,当从一方扣钱完毕出现异常,结果接收方没有收到钱,这样是绝对不行的,所以需要回滚,这就是事务。

下面呈上例子代码,这里模仿从一个人的钱里面扣钱,但是回滚到指定的地方,其实首先需要指定自动提交为false,然后一直等到所有事务处理完毕才能提交,然后可以设置保存点,然后回滚的时候回滚到指定的位置。

package com.bird.jdbc; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Savepoint; import com.bird.jdbc.dao.DaoException; public class TxTest { /** * @param args * @throws SQLException */ public static void main(String[] args) throws SQLException { test(); } public static void test() throws SQLException{ Connection con = null; PreparedStatement ps = null; ResultSet rs = null; Savepoint sp = null; try { con = Temple.getConnection(); con.setAutoCommit(false);//设置自动提交为false,禁止自动提交 String sql = "update user set money=money-10 where id=1"; ps = con.prepareStatement(sql); ps.executeUpdate(); sp = con.setSavepoint(); sql = "update user set money=money-10 where id=3"; ps=con.prepareStatement(sql); ps.executeUpdate(); sql = "select money from user where id=2"; ps = con.prepareStatement(sql); rs = ps.executeQuery(); float money = 0.0f; if(rs.next()){ money = rs.getFloat("money"); } if(money > 200) throw new RuntimeException("钱够多了,超过最大值"); sql = "update user set money=money+10 where id=2"; ps=con.prepareStatement(sql); ps.executeUpdate(); con.commit();//一并提交,放到一个事件中去 } catch (RuntimeException e) { if(con != null && sp != null) con.rollback(sp); con.commit(); throw new DaoException(e); } catch (SQLException e) { if(con != null) con.rollback(); throw new DaoException(e); } finally{ Temple.free(con, ps, rs); } } } 虽然代码很短,而且关于事务的代码其实是很少的,所以好好记住

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值