码迷,mamicode.com
首页 > 编程语言 > 详细

Java事务

时间:2019-04-13 17:43:33      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:结果   OLE   数据库操作   重复   family   toc   boolean   问题   ack   

一、什么是Java事务?

  • 通常的观念认为,事务仅与数据库相关
  • 事务必须服从ACID原则,及原子性、一致性、隔离性和持久性的缩写。
    • 原子性(Atomictity):表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。
    • 一致性(Consistency):表示事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。
    • 隔离性(isolation):表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。
    • 持久性(durability):表示已提交的数据在事务执行失败时,数据的状态都应该正确。
  • 通俗理解,事务是一组原子操作单元,从数据角度说,就是一组SQL指令,要么执全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。简单理解就是要么全部执行成功,要么撤销不执行。
  • 一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增删查改都是通过相应方法间接实现来实现的,事务的控制也相应的转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。

二、为什么需要Java事务?

  • 事务是为解决是数据安全操作提出的,事务控制实际上就是控制数据的安全访问。

三、Java事务类型

  • Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务。
  • JDBC事务
    • JDBC事务是用Connection对象控制的。JDBC Connection接口提供了两种事务模式:自动提交和手动提交。
      • setAutoCommit(boolean)
      • getAutoCommit()
      • commit()
      • rollback()
    • 使用JDBC事务界定时,可以将多个SQL语句结合到一个事务中。
    • JDBC事务的一个缺点是事务的范围局限于一个数据库连接。一个JDBC事务不能跨越多个数据。
  • JTA事务
  • 容器事务

四、三种Java事务差异?

  • JDBC事务控制的局限性在一个数据库连接内,但是其使用简单。
  • JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。
  • 容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。

五、事务并发处理可能引起的问题

  • 脏读:一个事务读取了另一个事务尚未提交的事务。
  • 不可重复读:一个事务的操作导致另一个事务前后两次读取到不同的数据
  • 幻读:一个事务的操作导致另一个事务前后两次查询的结果数据量不同。

六、JDBC的事务支撑

  • 自动提交模式
    • 当auto-commit为true时,当每个独立的SQL操作的执行完毕,事务立即自动提交,也就是说每个SQL操作都是一个事务
    • 当auto-commit为true时,每个事务都必须显示调用commit方法进行提交,或者显示调用rollback方法进行回滚。
  • 事务隔离级别:
    • TRANSACTION_NONE:JDBC驱动不支持事务
    • TRANSACTION_READ_UNCOMMITTED:允许脏读、不可重复读和幻读。
    • TRANSACTION_READ_COMMITTED:禁止脏读,但允许不可重复读和幻读。
    • TRANSACTION_REPEATABLE_READ:禁止脏读和不可重复读,但运行幻读。
    • TRANSACTION_SERIALIZABL:禁止脏读、不可重复读和幻读。
  • 保存点(SavePoint)

Java事务

标签:结果   OLE   数据库操作   重复   family   toc   boolean   问题   ack   

原文地址:https://www.cnblogs.com/lynn16/p/10701992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!