Atitti 数据库事务处理 attilax总结

Atitti 数据库事务处理 attilax总结

1.1. 为什么要传递Connection?1

1.2. 两种事务处理方式,一种是编程式事务处理;一种是声明...2

1.3. 事务隔离级别 2

1.4. 事务传播行为2

1.5. 事务的回滚规则 3

1.6. 声明式事务唯一不足地方是,方法级别,无法做到像编程式事务那样可以作用到代码块级别。3

1.7. 事务对影响记录条数的影响,好像没影响,回滚了也提示修改了一条。Callback没有也不关系。。只要不commit,好像就会自动回滚的。4

1.1. 为什么要传递Connection?

在前面的概述中我们知道, JDBC事务处理的作用对象为Connection, 因此要想控制操作在同一个事务里面,

我们必须要传递Connection, 确保使用的是同一个Connection.

还不是用Connection 
void setAutoCommit(boolean autoCommit) 
                   throws SQLException将此连接的自动提交模式设置为给定状态。如果连接处于自动提交模式下,则将执行其所有 SQL 语句,并将这些语句作为单独的事务提交。否则,其 SQL 语句将成组地进入通过调用 commit 方法或 rollback 方法终止的事务中。默认情况下,新的连接处于自动提交模式下。 
提交发生在语句完成或执行下一条语句时,以先发生的情况为准。在语句返回 ResultSet 对象的情况下,该语句在已检索完最后一行 ResultSet 对象或已关闭 ResultSet 对象时完成。在更复杂的情况下,单个语句可以返回多个结果和输出参数值。在这些情况下,提交发生在检索到所有结果和输出参数值后。

注:如果在事务处理期间调用此方法,则提交该事务。

1. // 开启 事务

2.         Connection conn = JDBCUtils.getConnection();

3.         conn.setAutoCommit(false);

1.   try {

2.             // 更新账户金额, 注意: 这里往Dao层传递连接

3.             accountDAO.update(outAccount, conn);

4.             // int x = 1 / 0;

5.             accountDAO.update(inAccount, conn);

6.

7.             // 转账成功, 提交事务

8.             conn.commit();

9.         } catch (Exception e) {

10.             // 转账失败, 回滚事务

11.             conn.rollback();

12.             e.printStackTrace();

13.         }

1.2. 两种事务处理方式,一种是编程式事务处理;一种是声明...

1.3. 事务隔离级别

隔离级别是指若干个并发的事务之间的隔离程度。TransactionDefinition 接口中定义了五个表示隔离级别的常量:
* TransactionDefinition.ISOLATION_DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是TransactionDefinition.ISOLATION_READ_COMMITTED。
* TransactionDefinition.ISOLATION_READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。
* TransactionDefinition.ISOLATION_READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
* TransactionDefinition.ISOLATION_REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。
* TransactionDefinition.ISOLATION_SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

1.4. 事务传播行为

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。在TransactionDefinition定义中包括了如下几个表示传播行为的常量:
* TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
* TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
* TransactionDefinition.PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
* TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
* TransactionDefinition.PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
* TransactionDefinition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
* TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。
这里需要指出的是,前面的六种事务传播行为是 Spring 从 EJB 中引入的,他们共享相同的概念。而 PROPAGATION_NESTED是 Spring 所特有的。以 PROPAGATION_NESTED 启动的事务内嵌于外部事务中(如果存在外部事务的话),此时,内嵌事务并不是一个独立的事务,它依赖于外部事务的存在,只有通过外部的事务提交,才能引起内部事务的提交,嵌套的

1.5. 事务的回滚规则

通常情况下,如果在事务中抛出了未检查异常(继承自 RuntimeException 的异常),则默认将回滚事务。如果没有抛出任何异常,或者抛出了已检查异常,则仍然提交事务。这通常也是大多数开发者希望的处理方式,也是 EJB 中的默认处理方式。但是,我们可以根据需要人为控制事务在抛出某些未检查异常时任然提交事务,或者在抛出某些已检查异常时回滚事务

1.6. 声明式事务唯一不足地方是,方法级别,无法做到像编程式事务那样可以作用到代码块级别。

后者的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。。

1.7. 事务对影响记录条数的影响,好像没影响,回滚了也提示修改了一条。Callback没有也不关系。。只要不commit,好像就会自动回滚的。

浅谈Spring事务管理 - 一生奋斗只为梦的专栏 - 博客频道 - CSDN.NET.html

浅谈Spring事务管理 - 一生奋斗只为梦的专栏 - 博客频道 - CSDN.NET.html

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )

汉字名:艾提拉(艾龙),   EMAIL:[email protected]

转载请注明来源: http://www.cnblogs.com/attilax/

Atiend

时间: 2024-07-29 16:09:37

Atitti 数据库事务处理 attilax总结的相关文章

十三、EnterpriseFrameWork框架核心类库之数据库操作(多数据库事务处理)

本章介绍框架中封装的数据库操作的一些功能,在实现的过程中费了不少心思,针对不同数据库的操作(SQLServer.Oracle.DB2)这方面还是比较简单的,用工厂模式就能很好解决,反而是在多数据库同时操作方面走了不少弯路:现在从以下几个方面进行说明: 一.不同数据库操作 此处用到了工厂模式来实现不同数据库操作,看下图 AbstractDatabase是一个抽象类,定义了所有对数据库的操作抽象方法,包括执行一个SQL语句.执行存储过程.事务操作等 [Serializable] public abs

数据库事务处理机制之事务回滚问题讨论

一.Sql中的事务 概念:事物是一种机制,是一种操作序列,它包含了一组数据库操作命令,这组命令要么全部执行,要么全部不执行.事务是一个不可分割的工作逻辑单元.在数据库系统上执行并发操作时事务是作为最小的控制单元来使用的.多用户登录系统适于使用事务机制. 属性:4大属性: a.原子性:事务时一个完整的操作.b.一致性:当事务完成时,数据库必须处于一致状态.c.隔离性:对数据进行修改的所有并发事务时彼此隔离的.d.持久性:事务完成后,它对于系统的影响是永久性的. 创建 (1)开始事务:begin t

java中的数据库事务处理

/*java使用事务处理,首先要求数据库支持事务,如使用MYSQL的事务功能,就要求mysql的表类型为Innodb,*/ /*InnoDB,是MySQL的数据库引擎之一 与传统的ISAM与MyISAM相比,InnoDB的最大特色就是支持了 ACID兼容的事务(Transaction)功能,类似于PostgreSQL.*///Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. // 1.JDBC事务--------java.sql.Conn

JDBC学习笔记(6)——获取自动生成的主键值&处理Blob&数据库事务处理

获取数据库自动生成的主键 [孤立的技术是没有价值的],我们这里只是为了了解具体的实现步骤:我们在插入数据的时候,经常会需要获取我们插入的这一行数据对应的主键值. 具体的代码实现: 1 /** 2 * 获取数据库自动生成的主键 3 */ 4 @Test 5 public void testGetKeyValues(){ 6 Connection connection=null; 7 PreparedStatement preparedStatement=null; 8 ResultSet rs=n

数据库事务处理

什么是事务 事务就是业务上的一个逻辑单元,它能够保证其中对数据所有的操作,要么全部成功,要么失败. 事务控制语句 COMMIR:提交事务,即把事务中对数据库的修改进行永久保存. ROLLBACK:回滚事务,即取消对数据库所做的任何修改. SAVEPOINT:在事务中创建存储点. ROLLBACKE TO<Savepoin_Name>:将事务回滚到存储点 . SET TRANSACTION:设置事务的属性. 事务的特性(事务必须具备以下四个属性,简称ACID属性) 1.原子性(Atomicity

关系型数据库事务处理ACID

ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性 (Isolation).持久性(Durability).一个支持事务(Transaction)的数据库系统,必需要具有这四种特性,否则在事务过程 (Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求. 原子性整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节.事务在执行过程中发生错误,会被

springBoot(14):使用SQL关系型数据库-事务处理

一.事务的四个特性(ACID) 原子性(Atomicity): 事务是一个原子操作,由一系列动作组成.事务的原子性确保动作要么全部完成,要么完全不起作用. 一致性(Consistency): 一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败.在现实中的数据不应该被破坏. 隔离性(Isolation): 可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏. 持久性(Durability): 一旦事务完成,无论发

多数据库事务处理:有待考究

转:http://www.cnblogs.com/tylerdonet/archive/2009/10/30/1592653.html 在一个数据库中实现事务是没什么问题,当时项目中常常会遇到多个数据库交叉事务的情况,这个方法使用两个SqlTransaction 来处理这两个数据库中的事务,当一个更新不成功两个都要回滚. 1 public void TransactionDebug() 2 { 3 4 string sql1 = @"Data Source=XXXXXX;Initial Cata

数据库事务处理差异:可提交读和重复读区别

本文来自于自己的博客:http://www.wangerbao.com/?p=279 Mysql默认事物是重复读(Repeatable Read Isolation Level), PostGres默认事物是提交读(Read Committed Isolation Level),现在根据实例来对比下它们的差别. Mysql: 左边为事物1,右边为事物2. 第一步: 事物1查询,事物2查询,它们的查询结果一致.  第二步: 事物1更新-查询-但是不提交,事物2查询,他们的结果不一致 第三步: 事物