Java事务
Posted 一叶一落秋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java事务相关的知识,希望对你有一定的参考价值。
一、什么是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事务不能跨越多个数据。
- JDBC事务是用Connection对象控制的。JDBC Connection接口提供了两种事务模式:自动提交和手动提交。
- 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事务的主要内容,如果未能解决你的问题,请参考以下文章