程序中事务控制相关
第一次学习数据库访问时,事务的控制基本很简单,大概代码如下:
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
分享到:
相关推荐
在IT行业中,数据库操作是应用程序的核心部分,而事务控制则是保证数据一致性与完整性的关键机制。本案例聚焦于`ibatis`(MyBatis前身)的事务管理,它是一个轻量级的Java持久层框架,提供了灵活的SQL映射功能。在...
当使用`JdbcTemplate`结合Spring框架时,可以采用与原生JDBC事务控制类似的方法,但在Spring环境中进行管理。以下是一个使用Druid数据库连接池的示例代码: ```java @RequestMapping("/druidData1") public String ...
总结来说,在C#程序中调用事务时,我们需要理解事务的基本原理和ACID属性,利用`System.Transactions`提供的工具来管理和控制事务。在VS2010环境下,通过ADO.NET与数据库交互,可以轻松地实现事务处理,确保数据操作...
通过以上步骤,我们可以在Spring4、SpringMVC和MyBatis集成环境中实现事务控制,确保数据操作的正确性和一致性。在实际项目中,还需要结合具体业务场景,选择合适的事务策略,例如,分布式事务可能需要引入其他技术...
本篇文章将深入探讨Spring中的事务控制,包括事务的基本概念、事务的特性、Spring事务管理的模式以及如何在实际应用中配置和使用事务。 首先,事务是数据库操作的基本单位,确保数据的一致性和完整性。ACID(原子性...
在JDBC中,`Connection`对象提供了事务控制的方法,如`setAutoCommit(false)`用于开启手动事务模式,`commit()`用于提交事务,而`rollback()`则用于回滚事务。在示例代码中,当数据库操作出现异常时,会调用`...
这个名为“分布式事务控制程序代码.rar”的压缩包显然提供了一个工具或者框架,帮助开发者轻松地管理和控制分布式环境中的事务。下面我们将深入探讨分布式事务的核心概念、相关技术以及该压缩包中可能包含的QDTC...
在 JDBC 中,事务控制主要依赖于 `java.sql.Connection` 接口的方法。默认情况下,JDBC 连接处于自动提交模式,这意味着每次执行 SQL 语句后都会自动提交事务。为了控制事务,我们需要关闭自动提交模式,然后手动...
6. **质量控制档案**:事务所应保留质量控制系统的相关记录,如人员招聘、专业发展和督导等,形成档案以便随时查阅和评估。 7. **质量控制的程序**:建立质量控制系统的步骤包括设立目标、了解现有系统、制定书面...
事务处理是数据库管理系统中的一个基本概念,指的是一系列的数据库操作,是数据库应用程序的基本逻辑单元。事务处理技术是保证信息可靠性和一致性的重要技术,其核心问题是并发控制和恢复处理(CC&R)。 二、事务...
错误的观点认为只有大型事务所才需要关注质量控制,或者认为质量控制仅是质量控制部门的责任,这些都忽视了质量控制在整个事务所运营中的核心地位。质量控制不仅关乎生存,更影响着事务所的长远发展,它如同汽车的...
这份名为“事务所质量控制:制度、程序与方法”的PPT材料,由天健会计师事务所制作,深入探讨了质量控制在事务所中的重要性、目标以及相关的职业准则要求。 首先,质量控制与事务所的效益密切相关。一个良好的质量...
在本“spring AOP(声明式事务管理)小程序”中,我们将深入探讨Spring AOP如何实现声明式事务管理,以及相关的通知类型。 1. **什么是声明式事务管理**: 声明式事务管理是相对于编程式事务管理而言的,后者需要在...
这意味着`methodB`的操作不受事务控制。 6. **PROPAGATION_NEVER** `methodB`将以非事务方式执行。如果当前存在事务,那么将抛出异常。这种行为适用于那些不能在事务中执行的操作。 7. **PROPAGATION_NESTED** ...
我们将通过`Trans_RPG1.RPGLE`和`Trans_RPG2.RPGLE`两个示例程序来讲解相关概念,并参考`Trans_CL.CLLE`中的CL(Control Language)程序,理解它们在实际应用中的作用。 首先,事务处理是数据库操作的基本单元,...
springMVC框架事务控制,保证业务操作的完整性 防止在一些意外(例如说突然断电)的情况下出现乱数据,防止数据库数据出现问题。 如:银行转帐。A账户减少的钱要加到B账户上,若A这边减了钱,B那边却还是一样的数,这...
在本项目中,我们将讨论如何在Spring.NET中结合Oracle数据库实现事务控制,以及利用自定义异常处理来确保数据的一致性和完整性。 首先,让我们了解什么是事务。在数据库操作中,事务是一系列操作的集合,这些操作...
在Spring框架中,为了管理和控制Hibernate事务,Spring提供了两种关键工具:HibernateTemplate和JdbcTemplate。这两个模板类简化了与数据库的交互,同时也处理了事务管理。让我们深入了解一下这两个类以及它们如何...