JDBC和数据库事务详解(一)

本文详细介绍了JDBC和数据库事务的相关知识,包括事务的原子性、保存点、扁平事务与嵌套事务,以及数据库事务的实现原理。重点讨论了事务隔离级别,如Read Uncommitted、Read Committed、Repeatable Read和Serializable,并通过举例说明了不同隔离级别可能导致的问题。此外,还提到了Undo段故障和Oracle数据库对此的支持情况。
摘要由CSDN通过智能技术生成

现在还在写JDBC事务的文章,我觉得我一定是相当的Out了,现在主流的java应用,框架都是分布式的,各种分布式的事务,或者容器事务才是需要学习的重点,在这里谈JDBC确实有点不合时宜,但任何的java 开发人员,如果不能够深入的理解数据库的事务,那在做数据处理的方面就一定是有所欠缺的,另外确实很少有文章能够谈到JDBC和数据库事务的精髓,希望这里能够让你深度的了解到什么是JDBC的事务以及它和数据库的关系。

事务

事务应该说是数据库最核心的能力之一,对于任何和数据打交道的开发人员而言,是非常重要的

事务的原子性

事务的最基本功能是原子性。比如张三给李四异地打钱5000元,假设同一银行异地手续费是5‰,那么数据库要干三件事情
张三的账户余额扣除5025(含5‰手续费,中国特色)
李四的账户余额增加5000
银行自己的账户余额增加25
这三件事情要么全部成功,要么全部失败,绝对不能一些成功,一些失败。
本地事务
对上面提出的问题,可以用一下代码简单示范

    String sql = 
“update Account set Balance = Balance + ? where id=?”
    try (Connection con = dataSource.getConnection();
PreparedStatement pstmtForSource = con.preparedStatement(sql);
PreparedStatement pstmtForTarget = con.preparedStatement(sql);
PreparedStatement pstmtForBlank = con.preparedStatement(sql)) {
        con.setAutoCommit(false); //关闭自动提交,手动事务开始
        pstmtForSource.setInt(1, -5025);
        pstmtForSource.setLong(2, sourceAccountId);
        pstmtForSource.executeUpdate();

        pstmtForTarget.setInt(1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值