Java 事务详解及简单应用实例

Java事务的简单使用 

Java事务在一些面试中会被问到。

面试的时候,我们首先要回答的是:事务能够保证数据的完整性和一致性。

如果功力深厚点的话:就说一些原理(任务开始前先设置不提交任务,在所有任务完成后再提交任务,
如果任务在中间断开,就执行回滚,撤销前面执行的任务),简单一点就举个的例子(比如存钱和取钱的问题。
比如:银行在两个账户之间转账,从A账户转入B账户1000元,系统先减少A账户的1000元,然后再为B账号增加1000元。如果全部执行成功,数据库处于一致性;如果仅执行完A账户金额的修改,而没有增加B账户的金额,则数据库就处于不一致状态,这时就需要取消前面的操作。)

本文对java事务做简单的探讨,一问到java事务我们要知道这和数据库相关。

一.先看一段简单的代码  

使用JDBC方式进行事务处理

public int delete(int sID) {
  //实现数据库连接的类
  DataBaseConnection dbc = new DataBaseConnection();
  //获取连接对象
  Connection con = dbc.getConnection();
  try {
    con.setAutoCommit(false);// 更改JDBC事务的默认提交方式
    dbc.executeUpdate("delete from xiao where ID=" + sID);
    dbc.executeUpdate("delete from xiao_content where ID=" + sID);
    dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID);
    con.commit();//提交JDBC事务
    con.setAutoCommit(true);// 恢复JDBC事务的默认提交方式
    dbc.close();
    return 1;
  }
  catch (Exception exc) {
    con.rollBack();//回滚JDBC事务
    dbc.close();
    return -1;
  }
} 

上面这一段代码就是一个比较简单的java事务的执行。
上面三次执行删除操作,只要有一次执行失败,都会执行任务回滚,相当于要么一起成功,要么什么都没做。

如果没有事务的管理,前面执行了就会马上在数据库里面更新,
执行到哪里失败就退出不再执行后面的任务,不能保证数据的一致性。

 二.Java事务的基础概念

 原子性(Atomicity)   :事务是一个完整的操作。事务的各步操作是不可分的(原子的);
       要么都执行,要么都不执行
一致性(Consistency):当事务完成时,数据必须处于一致状态
隔离性(Isolation)    :对数据进行修改的所有并发事务是彼此隔离的,这表明事务必须是独立的,

它不应以任何方式依赖于或影响其他事务
永久性(Durability)  :事务完成后,它对数据库的修改被永久保持,事务日志能够保持事务的永久性

java的事务处理描述:如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.
如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,
从而就有了事务的回滚,取消先前的操作.....

在数据库操作中,一项事务是指由一条或多条对数据库更新的sql语句所组成的一个不可分割的工作单元。
只有当事务中的所有操作都正常完成了,整个事务才能被提交到数据库,如果有一项操作没有完成,
就必须撤消整个事务。

例如在银行的转帐事务中,假定张三从自己的帐号上把1000元转到李四的帐号上,相关的sql语句如下:

update account set monery=monery-1000 where name='zhangsan'

update account set monery=monery+1000 where name='lisi'

这个两条语句必须作为一个完成的事务来处理。只有当两条都成功执行了,才能提交这个事务。
如果有一句失败,整个事务必须撤消。

在connection类中提供了3个控制事务的方法:
(1) setAutoCommit(Boolean autoCommit):设置是否自动提交事务;
(2) commit();提交事务;
(3) rollback();撤消事务;

在jdbc api中,默认的情况为自动提交事务,也就是说,每一条对数据库的更新的sql语句代表一项事务,
操作成功后,系统自动调用commit()来提交,否则将调用rollback()来撤消事务。

在jdbc api中,可以通过调用setAutoCommit(false) 来禁止自动提交事务。
然后就可以把多条更新数据库的sql语句做为一个事务,在所有操作完成之后,调用commit()来进行整体提交。
倘若其中一项 sql操作失败,就不会执行commit()方法,而是产生相应的sqlException,
此时就可以捕获异常代码块中调用rollback()方法撤消事务。

一般来说,专门开发数据库的开发者肯定是要对事务了解很深入的,
但是一般的程序员不需要花费太多时间在这方面。对大概作用有个理解就可以了。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • Java中JDBC事务与JTA分布式事务总结与区别

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现.所以本文暂不讨论容器事务.本文主要介绍J2EE开发中两个比较基本的事务:JDBC事务和JTA事务. JDBC事务 JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理.在JDBC中,

  • 在Java的JDBC使用中设置事务回滚的保存点的方法

    新的JDBC3.0保存点的接口提供了额外的事务控制.他们的环境中,如Oracle的PL/ SQL中的大多数现代的DBMS支持保存点. 当设置一个保存点在事务中定义一个逻辑回滚点.如果发生错误,过去一个保存点,则可以使用rollback方法来撤消要么所有的改变或仅保存点之后所做的更改. Connection对象有两个新的方法,可帮助管理保存点: setSavepoint(String savepointName): 定义了一个新的保存点.它也返回一个Savepoint 对象. releaseSav

  • 深入理解Java事务的原理与应用

    一.什么是JAVA事务 通常的观念认为,事务仅与数据库相关. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性 (isolation)和持久性(durability)的缩写.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效.一致性表示 当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态.隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见.持 久性表示已提交的

  • 详解Java的MyBatis框架中的事务处理

    一.MyBatis单独使用时,使用SqlSession来处理事务: public class MyBatisTxTest { private static SqlSessionFactory sqlSessionFactory; private static Reader reader; @BeforeClass public static void setUpBeforeClass() throws Exception { try { reader = Resources.getResourc

  • 详解Java的JDBC API中事务的提交和回滚

    如果JDBC连接是在自动提交模式下,它在默认情况下,那么每个SQL语句都是在其完成时提交到数据库. 这可能是对简单的应用程序,但有三个原因,你可能想关闭自动提交和管理自己的事务: 为了提高性能 为了保持业务流程的完整性 使用分布式事务 若要控制事务,以及何时更改应用到数据库.它把单个SQL语句或一组SQL语句作为一个逻辑单元,而且如果任何语句失败,整个事务失败. 若要启用,而不是JDBC驱动程序默认使用auto-commit模式手动事务支持,使用Connection对象的的setAutoComm

  • Java事务的个人理解小结

    一.什么是Java事务 通常的观念认为,事务仅与数据库相关.        事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolation)和持久性(durability)的缩写.事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效.一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态.隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见.持久性表示

  • 深入解析Java的Spring框架中的混合事务与bean的区分

    混合事务 在ORM框架的事务管理器的事务内,使用JdbcTemplate执行SQL是不会纳入事务管理的. 下面进行源码分析,看为什么必须要在DataSourceTransactionManager的事务内使用JdbcTemplate. 1.开启事务 DataSourceTransactionManager protected void doBegin(Object transaction,TransactionDefinition definition) { DataSourceTransact

  • Java 基础之事务详细介绍

    java 事务详解 一.什么是事务 事务是访问数据库的一个操作序列,数据库应用系统通过事务集来完成对数据库的存取.事务的正确执行使得数据库从一种状态转换成另一种状态. 事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolation)和持久性(durability)的缩写事务必须服从ISO/IEC所制定的ACID原则.ACID是原子性(atomicity).一致性(consistency).隔离性(isolati

  • 详解Java的Spring框架中的事务管理方式

    数据库事务是被当作单个工作单元的操作序列.这些操作要么全部完成或全部不成功.事务管理是面向企业应用程序,以确保数据的完整性和一致性RDBMS中的重要组成部分.事务的概念可以用下面的描述为ACID四个关键属性来描述: 原子性: 一个事务应该被视为单个操作单元表示的操作的任一整个序列是成功的或不成功的. 一致性: 这代表了数据库的参照完整性,在桌等唯一主键的一致性 隔离性: 可能有很多事务处理相同的数据集的同时,每个事务都应由他人隔离,以防止数据损坏. 持久性: 一旦事务完成,本次事务的结果必须作出

  • Java Spring 事务回滚详解

    spring 事务回滚 1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代码如下: public method() { Dao1.save(Person1); Dao1.save(Person2); Dao1.save(Person2);//假如这句发生了错误,前面的两个对象会被保存到数据库中 Dao1.save(Person2); } 期待的情况:发生错误之前的所有数据库保存操作都回滚,即不保存 正常情况:前面的数据库操作会被执行,而发生数据库操作错

随机推荐