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:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

Atiend

Atitti 数据库事务处理 attilax总结相关推荐

  1. ASP实现数据库事务处理的方法

    在开发Web应用时,无一例外地需要访问数据库,以完成对数据的查询.插入.更新.删除等操作.受应用逻辑的影响,有时需要将多条数据库操作指令组成一个工作单元(事务).在数据库中,所谓事务是指一组逻辑操作单 ...

  2. mysql 数据库事务处理_Mysql事务处理问题 - mysql数据库栏目 - 自学php

    今天和同学讨论起数据库事务处理的问题,感觉讨论中明白了一些,有些知识看过了,但是没有实际使用还是不理解. 事务处理就是将一系列操作当做一个原子操作,要么全部执行成功,如果执行失败则保留执行期的状态.通 ...

  3. mysql 多数据库事务_多数据库事务处理

    看见园子里面一位高人写了一篇多数据库事务处理的东西,觉得很有意思,把它重写了一下. 在一个数据库中实现事务是没什么问题,当时项目中常常会遇到多个数据库交叉事务的情况,这个方法使用两个SqlTransa ...

  4. 使用Spring框架实现数据库事务处理

    企业级应用系统在更新数据库数据时,一般都采用数据库事务处理,以确保数据库数据的一致性.本文主要讨论在Spring框架中如何使用数据库事务处理更新数据库数据.通过本课的学习,可以达到如下目标. ● 了解 ...

  5. MS SQL Server和Oracle对数据库事务处理的差异性

    背景 在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MS SQL Server和Oracle对数据库事务处理的差异性引起一些争论,因此记录我对数据库事务处理的想法. 简 ...

  6. 【MySQL】数据库事务处理---MySQL

    事务处理用于有效记录某机构感兴趣的业务活动(称为事务)的数据处理(例如销售.供货的定购或货币传输).通常,联机事务处理 (OLTP) 系统执行大量的相对较小的事务----百度百科. 事务处理是将多个操 ...

  7. 事务统计系统软件 php,PHP数据库事务处理

    PHP数据库事务处理 在使用php中使用数据库事务处理并不复杂,主要用到的是mysqli类的3个成员函数. (1)autocommit(bool mode),设置数据库自动提交状态.当mode为TRU ...

  8. oracle数据库的并发控制,Oracle数据库—— 事务处理与并发控制

    一.涉及内容 1.理解事务的概念和几个特性. 2.熟练掌握事务管理命令的使用. 3.理解并发操作的概念和数据库锁的类型. 二.具体操作 (12.5 实验) 1. 分析以下代码,说出代码中的哪些部分体现 ...

  9. AS400数据库事务处理机制

    AS400数据库事务处理机制 记录锁等待与程序处理机制 在多作业并发处理中为了保证事务的完整性,数据库通过记录锁.表锁来确保数据的正确性.一个作业在获得一条记录锁时,如果此记录已经处于锁状态,那么当前 ...

  10. 【技术分享】华为叶涛:数据库事务处理的原理与实例剖析

    本文整理自DTCC2016主题演讲内容,录音整理及文字编辑IT168@杨璐.如需转载,请先联系本公众号获取授权! 演讲嘉宾 叶涛 华为技术有限公司 高级工程师 华中科技大学计算机博士,华为技术有限公司 ...

最新文章

  1. php实现调查结果百分比显示,Php文本游戏试图根据百分比做出结果
  2. C-#数据库方面好书
  3. bzoj4034: [HAOI2015]树上操作
  4. 安装elasticsearch5.4.1集群和head插件
  5. Python 前端的第三方库
  6. python爬虫实现网页采集器
  7. 借百度数据,建立你自己的程序
  8. (10)Zynq IIC控制器介绍
  9. NOI.AC #31. MST
  10. 实例--[QSerialPort]串口通信
  11. Python3.6之py文件转exe文件
  12. Prisma(一)——基础
  13. windows系统的包管理器【choco】
  14. 软件测试工资一般多少 即使测试刚入行,起步月薪也会在8k-9k
  15. pandas之用loc、iloc、ix进行索引以及切片
  16. 即使是个收外卖的前台小妹,也要时刻想着如何咸鱼翻身
  17. textpad java sdk_如何防止TextPad在运行Java时创建临时批处理文件?
  18. Allegro修改shape网络节点
  19. 计算机代数的应用,计算机代数及其应用-陶庆生(1991).pdf
  20. JAVA笔记- JAVA一维、二维数组的遍历与使用详解

热门文章

  1. qt电容触摸屏实现长按_电阻屏和电容屏有什么区别?究竟谁更胜一筹?
  2. java 二进制右移位_(九)二进制、位运算、位移运算符
  3. Oracle+Mybatis模糊查询
  4. Elasticell-聊聊Raft的优化
  5. Android开发学习路线图
  6. 从盒子到“云”——让用户享受更轻松的应用交付
  7. linux PS1 变量设置
  8. 云数据库POLARDB优势解读之①——10分钟了解
  9. 解决ImmediateDeprecationError 用Python获取Yahoo数据
  10. poj1273:Drainage Ditches