`
tyny
  • 浏览: 75776 次
  • 性别: Icon_minigender_1
  • 来自: 黄冈
社区版块
存档分类
最新评论

程序中事务控制相关

 
阅读更多

程序中事务控制相关
第一次学习数据库访问时,事务的控制基本很简单,大概代码如下:

    public class ExampleStep1
    {
        DbConnection GetConnection()
        {
            return new OracleConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString);
        }

        public void Excute()
        {
            using (DbConnection con = this.GetConnection())
            {
                con.Open();
                DbTransaction transaction = con.BeginTransaction();
                try
                {
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                }
                con.Close();
            }
        }
    }

但是在业务系统中,我们不可能把所有的业务放在一个数据访问接口里面,实际情况是多个数据访问接口的相互协作,即多个接口同在一个服务接口里面,但是这些接口必须在同一个事务里面,简单的方式就是在业务里面启动事务,因为事务是和数据库连接一起的,所以可以把数据库连接和事务控制放在服务接口里面(当然可以使用委托来实现),

    public class ExampleStep2
    {
        DbConnection GetConnection()
        {
            return new OracleConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString);
        }

        public void Excute()
        {
            using (DbConnection con = this.GetConnection())
            {
                con.Open();
                DbTransaction transaction = con.BeginTransaction();
                try
                {
                    Opt1(con);
                    Opt2(con);
                    transaction.Commit();
                }
                catch
                {
                    transaction.Rollback();
                }
                con.Close();
            }
        }

        private void Opt1(DbConnection con)
        {
        }

        private void Opt2(DbConnection con)
        {
        }
    }

 但是这种业务逻辑里面参杂事务的做法似乎不合时宜,于是里面会想到TransactionScope,他可以不关联数据库连接,这样可以把事务从数据库的管理剥离出来

    public class ExampleStep3
    {
        DbConnection GetConnection()
        {
            return new OracleConnection(ConfigurationManager.ConnectionStrings["connectionstring"].ConnectionString);
        }

        public void Excute()
        {
            using (TransactionScope scope = new TransactionScope())
            {
                Opt1();
                Opt2();
                scope.Complete();
            }
        }

        private void Opt1()
        {
            using (DbConnection con = this.GetConnection())
            {
                con.Open();
                //
                con.Close();
            }
        }

        private void Opt2()
        {
            using (DbConnection con = this.GetConnection())
            {
                con.Open();
                //
                con.Close();
            }
        }
    }

尽管现在可以很好的在服务接口控制事务了,但是对于一个纯业务的接口而言,事务似乎也略显多余,如果能够从业务里面剥离事务的控制,但是这种代码基本覆盖所有涉及到数据访问的服务接口,aop是实现这种控制的一个方法之一。spring.net的事务控制也是基于此方式的。

 

引用:

 像TransactionScope一样使用DbTransaction

 Java Transaction Design Strategies

分享到:
评论

相关推荐

    ibatis事务控制案例

    在IT行业中,数据库操作是应用程序的核心部分,而事务控制则是保证数据一致性与完整性的关键机制。本案例聚焦于`ibatis`(MyBatis前身)的事务管理,它是一个轻量级的Java持久层框架,提供了灵活的SQL映射功能。在...

    JdbcTemplate的事务控制.docx

    当使用`JdbcTemplate`结合Spring框架时,可以采用与原生JDBC事务控制类似的方法,但在Spring环境中进行管理。以下是一个使用Druid数据库连接池的示例代码: ```java @RequestMapping("/druidData1") public String ...

    事务在C#程序中的调用

    总结来说,在C#程序中调用事务时,我们需要理解事务的基本原理和ACID属性,利用`System.Transactions`提供的工具来管理和控制事务。在VS2010环境下,通过ADO.NET与数据库交互,可以轻松地实现事务处理,确保数据操作...

    Spring4+SpringMVC+Mybaties 内含有事务控制

    通过以上步骤,我们可以在Spring4、SpringMVC和MyBatis集成环境中实现事务控制,确保数据操作的正确性和一致性。在实际项目中,还需要结合具体业务场景,选择合适的事务策略,例如,分布式事务可能需要引入其他技术...

    Spring中的事务控制

    本篇文章将深入探讨Spring中的事务控制,包括事务的基本概念、事务的特性、Spring事务管理的模式以及如何在实际应用中配置和使用事务。 首先,事务是数据库操作的基本单位,确保数据的一致性和完整性。ACID(原子性...

    Hibernate事务和并发控制

    在JDBC中,`Connection`对象提供了事务控制的方法,如`setAutoCommit(false)`用于开启手动事务模式,`commit()`用于提交事务,而`rollback()`则用于回滚事务。在示例代码中,当数据库操作出现异常时,会调用`...

    分布式事务控制程序代码.rar

    这个名为“分布式事务控制程序代码.rar”的压缩包显然提供了一个工具或者框架,帮助开发者轻松地管理和控制分布式环境中的事务。下面我们将深入探讨分布式事务的核心概念、相关技术以及该压缩包中可能包含的QDTC...

    某会计师事务所质量控制程序文件.doc

    制定合理的时间表,确保质量控制程序能够及时更新和执行,是事务所质量控制工作中的重要组成部分。 总的来说,会计师事务所的质量控制程序是确保其审计工作质量和专业标准的重要工具。通过这些程序,事务所不仅能够...

    JDBC事务控制--讲述如何控制JDBC事务

    在 JDBC 中,事务控制主要依赖于 `java.sql.Connection` 接口的方法。默认情况下,JDBC 连接处于自动提交模式,这意味着每次执行 SQL 语句后都会自动提交事务。为了控制事务,我们需要关闭自动提交模式,然后手动...

    浅谈数据库中事务处理和并发控制技术

    事务处理是数据库管理系统中的一个基本概念,指的是一系列的数据库操作,是数据库应用程序的基本逻辑单元。事务处理技术是保证信息可靠性和一致性的重要技术,其核心问题是并发控制和恢复处理(CC&R)。 二、事务...

    事务所质量控制制度程序与方法.ppt

    错误的观点认为只有大型事务所才需要关注质量控制,或者认为质量控制仅是质量控制部门的责任,这些都忽视了质量控制在整个事务所运营中的核心地位。质量控制不仅关乎生存,更影响着事务所的长远发展,它如同汽车的...

    事务所质量控制:制度、程序与方法.ppt

    这份名为“事务所质量控制:制度、程序与方法”的PPT材料,由天健会计师事务所制作,深入探讨了质量控制在事务所中的重要性、目标以及相关的职业准则要求。 首先,质量控制与事务所的效益密切相关。一个良好的质量...

    spring AOP(声明式事务管理)小程序

    在本“spring AOP(声明式事务管理)小程序”中,我们将深入探讨Spring AOP如何实现声明式事务管理,以及相关的通知类型。 1. **什么是声明式事务管理**: 声明式事务管理是相对于编程式事务管理而言的,后者需要在...

    Spring中事务的传播属性详解

    这意味着`methodB`的操作不受事务控制。 6. **PROPAGATION_NEVER** `methodB`将以非事务方式执行。如果当前存在事务,那么将抛出异常。这种行为适用于那些不能在事务中执行的操作。 7. **PROPAGATION_NESTED** ...

    RPGLE 事务处理程序实例代码

    我们将通过`Trans_RPG1.RPGLE`和`Trans_RPG2.RPGLE`两个示例程序来讲解相关概念,并参考`Trans_CL.CLLE`中的CL(Control Language)程序,理解它们在实际应用中的作用。 首先,事务处理是数据库操作的基本单元,...

    spring框架事务控制

    springMVC框架事务控制,保证业务操作的完整性 防止在一些意外(例如说突然断电)的情况下出现乱数据,防止数据库数据出现问题。 如:银行转帐。A账户减少的钱要加到B账户上,若A这边减了钱,B那边却还是一样的数,这...

    spring.net oracle 事务控制

    在本项目中,我们将讨论如何在Spring.NET中结合Oracle数据库实现事务控制,以及利用自定义异常处理来确保数据的一致性和完整性。 首先,让我们了解什么是事务。在数据库操作中,事务是一系列操作的集合,这些操作...

    Spring控制Hibernate中的事务传播特性与隔离级别操作.docx

    在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...

Global site tag (gtag.js) - Google Analytics