JDBC 事务处理

l原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。
l一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)。
l隔离性(isolcation):一个事务处理对另一个事务处理的影响。
l持续性(durability):事务处理的效果能够被永久保存下来 。
lconnection.setAutoCommit(false);//打开事务。
lconnection.commit();//提交事务。

connection.rollback();//回滚事务。

 

 

 

l当只想撤销事务中的部分操作时可使用SavePoint
lSavePoint sp = connection.setSavepoint();
lconnection.rollerbak(sp);connection.commit();
 
 
 
l跨越多个数据源的事务,使用JTA容器实现事务。
l分成两阶段提交。
ljavax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName");

  tx.begin();

  //connection1 connection2 (可能来自不同的数据库)…

    tx.commit();//tx.rollback();

 

 

 

隔离级别多线程并发读取数据时的正确性

lconnection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
lV:可能出现,X:不会出现

 

隔离级别

脏读

不可重复读

幻读

读未提交(Read   uncommitted)

V

V

V

读已提交(Read   committed)

x

V

V

可重复读(Repeatable   read)

x

x

V

可串行化(Serializable )

x

x

x

 

脏读(dirty reads

 

一个事务读取了另一个未提交的并行事务写的数据。

 

不可重复读(non-repeatable reads

 

一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。

 

幻读(phantom read

 

一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。

 

posted on 2013-04-20 22:14  peter.peng  阅读(156)  评论(0编辑  收藏  举报