`
tyny
  • 浏览: 75598 次
  • 性别: 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...

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

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

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

    6. **质量控制档案**:事务所应保留质量控制系统的相关记录,如人员招聘、专业发展和督导等,形成档案以便随时查阅和评估。 7. **质量控制的程序**:建立质量控制系统的步骤包括设立目标、了解现有系统、制定书面...

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

    事务处理是数据库管理系统中的一个基本概念,指的是一系列的数据库操作,是数据库应用程序的基本逻辑单元。事务处理技术是保证信息可靠性和一致性的重要技术,其核心问题是并发控制和恢复处理(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