JDBC事务处理

  • 什么是事务

       一个事务是由一条或几条数据库操作的SQL语句所组成的一个不可分割的工作单元。事务必须服从ACID原则,即原子性(atomicity)、一致性(consistency)、隔离性(isolation)、持久性(durability)。

      通俗理解,事务就是一组原子操作单元,要么全部执行成功,若因为某个原因其中一条指令执行有错误,则撤销先前执行过的所有指令。即,要么全部执行成功,要么撤销不执行

 

  • 结束事务的操作

       1. commit()方法,表示完成对事务的提交

       2. rollback()方法,表示完成事务回滚,多用于在处理事务过程中出现了异常的情况。

       一般而言,事务默认操作是自动提交,即操作成功后,系统将自动调用commit()方法,否则将调用rollback()方法

 

  • 5种事务隔离级别

       1. TRANSACTION_NONE JDB。不支持事务。

       2. TRANSACTION_READ_UNCOMMIT。未提交读。说明在提交前一个事务可以看到另一个事务的变化。允许“脏”读、不可重复读和虚读。

       3. TRANSACTION_READ_COMMIT。已提交读。说明读取未提交的数据是不允许的。允许不可重复读和虚读。

       4. TRANSACTION_REPEATABLE_READ。可重复读。说明事务保证能够再次读取相同的数据而不会失败,但仍允许虚读。

       5. TRANSACTION_SERIALIZABLE。可序列化。是最高的事务级别。能防止“脏”读,不可重复读和虚读。

 

  • “脏”读: 一个事务读取了另一个事务尚未提交的数据
  • 不可重复读:一个事务的操作导致另一个事务前后读取到不同的数据
  • 虚读:一个事务导致另一个事务前后两次查询的结果数据量不同。(例如,当事务A与事务B并发执行时,当事务B查询读取数据后,事务A新增或删除了一条满足事务A的查询条件记录,此时,事务B再次查询,发现查询到当次不存在的记录,或者前次的某个记录不见了。)

 

     事务隔离级别越高,为避免冲突所花的精力也就越多。可以通过Connection对象的conn.setTransactionLevel()方法来设置隔离级别,通过conn.getTransactionIsolation()方法来确定当前事务的级别。

posted on 2017-03-23 15:50  一个不会coding的girl  阅读(161)  评论(0编辑  收藏  举报

导航