posts - 28,  comments - 15,  trackbacks - 0

         JDBC3.0(JDK4.0),引入了一个新特性Savepoint。我们知道,在JDBC2.0中的事务支持让开发者可以控制对数据的并发访问,从而保证数据的一致性。但有时候我们需要对事务多一点的控制,而不是在当前的事务中简单地对每一个改变进行回滚。在 JDBC 3.0 下,我们可以通过 Savepoint 获得这种控制。 Savepoint 接口允许您将事务分割为各个逻辑断点,以控制有多少事务需要回滚。下图将说明如何在事务中运用 Savepoint

JDBC下使用Savepoint

示例代码:

conn.setAutoCommit(false);
// Set a conservative transaction isolation level.
conn.setTransactionIsolation(Connection.TRANSACTION_SERIALIZABLE);
Statement stmt 
= conn.createStatement();
int rows = stmt.executeUpdate(    "INSERT INTO authors " + 
                
'(first_name, last_name) VALUES " +
                '('Lewis''Carroll')");
// Set a named savepoint.
Savepoint svpt = conn.setSavepoint("NewAuthor");
// 
rows = stmt.executeUpdate(    "UPDATE authors set type = 'fiction' " +
                
"WHERE last_name = 'Carroll'");
// 
conn.rollback(svpt);
// 
// The author has been added, but not updated.
conn.commit();

    

示例结果就是,insert语句将被执行,update语句未执行,其被回滚了。

Hibernate下使用Savepoint

示例:

Session s = sf.openSession();   
Transaction tx 
= s.beginTransaction();   
  
User u1 
= new User();u1.setId(1);u1.setName("u1");   
s.save(u1);   
  
Savepoint savepoint1 
= s.connection().setSavepoint();   
User u2 
= new User();u2.setId(2);u2.setName("u2");   
s.save(u2);   
 s.flush();

s.connection().rollback(savepoint1);   
//s.connection().releaseSavepoint(savepoint1);   
  
tx.commit();  

 

SpringSavepoint的支持

 

posted on 2012-01-30 11:36 zhangxl 阅读(2520) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
<2012年1月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234

常用链接

留言簿(1)

随笔分类(17)

随笔档案(28)

文章分类(30)

文章档案(30)

相册

收藏夹(2)

hibernate

java基础

mysql

xml

关注

压力测试

算法

最新随笔

搜索

  •  

积分与排名

  • 积分 - 95496
  • 排名 - 602

最新评论

阅读排行榜

评论排行榜