Java学习笔记3-JDBC事务管理

数据库中的事务就是一组数据库操作,具有几个特点:
1. 原子性,完整操作不可分割。
2. 一致性,数据保持一致。
3. 隔离性,并发事务彼此隔离,意思就是我做的时候,别人不能做,我做完了,别人才能做。
4. 永久性,对数据库的修改是永久保持的。

其中的原子性,就是把一组数据库操作当作一个完整不可分割的操作,举个例子,银行账户A向银行账户B转账,A中的金额减少,B中的金额增加,这两个操作必须当作一个完整不可分割的操作执行。

JDBC对事务管理的支持:
commit()提交操作
rollback()回滚操作
setAutoCommit(false)禁止自动提交

事务默认是自动提交的,在进行事务管理时,调用setAutoCommit()禁止自动提交,当事务操作失败或者出现异常时,调用rollback()回滚。

下面是慕课网上面的一个例子,我直接拿过来用了:

public String transaction(Account from, Account to, double amount) throws Exception{
        Connection conn = DBUtil.getConnection();
        //禁止自动提交
        conn.setAutoCommit(false);
        try{
            AccountDao accountDao = new AccountDao();
            TransDao transDao = new TransDao();

            from.setAmount(from.getAmount() - amount);
            accountDao.update(from);
            //如果在期间出现由于其他程序引起的异常,导致下面的语句没有执行
            String error = null;
            error.split(" ");

            to.setAmount(to.getAmount() + amount);
            accountDao.update(to);

            TransInfo info = new TransInfo();
            info.setSourceAccount(from.getAccount());
            info.setSource_id(from.getId());
            info.setDestinationAccount(to.getAccount());
            info.setDestinationId(to.getId());
            info.setAmount(amount);
            transDao.insert(info);

            //手动提交操作
            conn.commit();

            return "success";

        }catch(Exception e){
            //回滚操作
            conn.rollback();
            e.printStackTrace();
            return "false";
        }
    }

在执行上面的程序时,我们会发现,由于字符串error为null, 导致的空指针异常,这时候数据库执行回滚操作,保证了数据的正确。

以上就是JDBC事务管理的一个简单例子。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值