java事务

一、什么是Java 事务
通常的观念认为,事务仅与数据库相关。事务必须服从ISO/IEC所制定的ACID原则,即:原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。
1)事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效;一个事务中可能是一条或多条sql,只要其中的一条sql执行失败,则整个事务都是失败的。

2)一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。

3)隔离性表示在事务执行过程中对数据的修改在事务提交之前对其他事务不可见(这跟数据库本身的隔离级别有关系请参阅数据库事务隔离级别)。
4)持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。


通俗的理解,事务是一组原子操作单元,从数据库角度说,就是一组SQL指令,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。更简答的说就是:要么全部执行成功,要么撤销不执行。

既然事务的概念从数据库而来,那Java事务是什么?之间有什么联系?
实际上,一个Java应用系统,如果要操作数据库,则通过JDBC来实现的。增加、修改、删除都是通过相应方法间接来实现的,事务的控制也相应转移到Java程序代码中。因此,数据库操作的事务习惯上就称为Java事务。

二、事务的作用
事务是为解决数据安全操作提出的,事务控制实际上就是控制数据的安全访问。举一个简单例子:比如银行转帐业务,账户A要将自己账户上的100元转到B账户下面,逻辑上A账户余额首先要减去100元,然后B账户要增加100元。假如在中间网络出现了故障,A账户减去100元已经结束,B因为网络中断而操作失败,那么整个业务失败,像类似这样的情况必须做出控制,必须要求把A账户转帐业务撤销。这才能保证业务的正确性,否则谁来承担这样的损失呢;因此将A账户资金减少和B账户资金增加方到一个事务里面,要么全部执行成功,要么操作全部撤销,这样就保持了数据的安全性 。

三、Java事务的类型
Java事务的类型有三种:JDBC事务、JTA(Java Transaction API)事务、容器事务(ejb)。本文只讲述JDBC事务:
JDBC事务是用Connection对象控制的。JDBC Connection接口( java.sql.Connection)提供了两种事务模式:自动提交和手工提交(设计程序使用事务时定选择后者)java.sql.Connection提供了以下控制事务的方法:
public void setAutoCommit(boolean)
public boolean getAutoCommit()
public void commit()
public void rollback()
使用 JDBC 事务界定时,您可以将多个 SQL 语句结合到一个事务中。JDBC 事务的一个缺点是事务的范围局限于一个数据库连接。一个JDBC 事务不能跨越多个数据库。

虽然只讲述JDBC事务,但简单讲述一下这几种事务之间的差别,以便留下印象
1、JDBC事务控制的局限性在一个数据库连接内,但是其使用简单。
2、JTA事务的功能强大,事务可以跨越多个数据库或多个DAO,使用也比较复杂。
3、容器事务,主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。
--------------------------------------------------------------------------
  在JDBC中是通过Connection对象进行事务管理的,默认是自动提交事务,可以手工将自动提交关闭,通过commit方法进行提交,rollback方法进行回滚,如果不提交,则数据不会真正的插入到数据库中。

    Hibernate中是通过Transaction进行事务管理,处理方法与JDBC中类似。

    Spring中也有自己的事务管理机制,使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。

你可能感兴趣的:(java事务,oracle事务)