灵活地回滚事务

原创 2004年04月08日 19:02:00

 灵活地回滚事务 

JDBC 3.0的一个最酷的新功能就是它可以在一个事务中创建并运用savepoints。Savepoints——长期以来是SQL的一个功能——通过标记事务可以回滚到的中间步骤,就可以让你细化地控制一个JDBC数据库事务。

那么你为什么要这么做呢?我们来看一个典型的订票问题。Ivana女士想从Boston到Cancun度假,然后再回来。她订的票是从Boston到New York,再到Cancun的,然后再返回,因为没有从Boston到Cancun的直航。下面就是整个事务的步骤:  1. 开始事务
2. 订从Boston到NY的航班
3. 订从NY到Cancun的航班
4. 订从Cancun到NY的返航
5. 订从NY到Boston的返航
6. 提交事务
7. 如果出现异常或错误,回滚事务


但在这个例子中,如果在第五步,票售完了,整个行程就得取消,回滚使数据库回复到第一步开始执行前的状态。然而,不管怎样Ivana可能还是需要一些票的,因为她可以在返回时坐另外的航线。你可以用JDBC 3.0的savepoints来帮助Ivana女士,整个事务如下:  1. 开始事务
2. 订从Boston到NY的航班
3. 订从NY到Cancun的航班
4. 建立savepoint
5. 订从Cancun到NY的返航
6. 订从NY到Boston的返航
7. 当出现异常或错误时,如果设了savepoint,回滚事务到步骤4中的savepoint
8. 提交事务

简单地说,一个savepoint就是代表一个特殊时间点上的一个事务,并对事务中SQL语句的一个子集完成的工作提供细化的控制。运用savepoint,你就不会回滚到一个事务的起始状态,而是回滚到savepoint。你可以在一个单一的事务中运用多个savepoints,通过明确调用Connection.releaseSavepoint (savepoint) 方法,或者通过提交事务、回滚整个事务来释放(release)savepoints。一旦一个savepoint被释放了,试图回滚到它就会抛出一个SQLException异常。

要在你的Java代码中运用savepoints,你必须运用JDBC 3.0,这就是说:  · 你必须运用JDK 1.4,因为它是一个核心API。
· 你的JDBC驱动程序必须是JDBC 3.0兼容的。你可以在http://industry.java.sun.com/products/jdbc/drivers的Sun JDBC驱动程序数据库中找到JDBC驱动程序列表。


样例代码的结果显示了JDBC中的savepoint如何与SQL savepoint相应,而且事务是如何回滚到savepoint的(见列表1和图1)。当然,你可以用其它的方法来解决订票问题,比如把事务分成多个事务。但是savepoints是个很好的方法,它可以让你不用处理许多不同的事务。
 

灵活地回滚事务

google_ad_client = "pub-8800625213955058";/* 336x280, 创建于 07-11-21 */google_ad_slot = "0989131976";...
  • java169
  • java169
  • 2008年05月24日 03:58
  • 243

Elcipse与MyEclipse

很多Java的学习者会纠结一个问题, 是采用免费的Eclipse呢还是采用破解的MyEclipse.在讨论这个问题之前,我们先来看看他们的区别把:        Eclipse,跨平台的自由集成开发环...
  • Fighting1994
  • Fighting1994
  • 2016年02月25日 23:20
  • 288

冷夫记第四章

济城  这是距离他们最近的城镇了,花了一个日夜的时间,终於将那群盗匪押进了官府,因为冉律堂的武功高强,加上一张冷脸发挥了最大的恐吓功用,途中他们根本就没有花费到一丁点气力,但是多年来为山匪所苦的总捕头...
  • feiruby
  • feiruby
  • 2007年10月03日 20:14
  • 1226

灵活地应用抽象工厂方法模式

我们在实际项目开发过程中应该说用得较多的还是抽象工厂方法模式(例如:在开发出来的一个网站可能连接不同的数据,我们需要用抽象工厂的方式把实例化具体对象(SqlServerUser对象)工厂中去)。废话少...
  • sevenkj
  • sevenkj
  • 2014年12月03日 15:05
  • 445

如何灵活地使用迭代?

如何灵活地使用迭代
  • O1ORongO1O
  • O1ORongO1O
  • 2017年03月01日 21:29
  • 111

权限灵活可配-简单理解

权限: 百度百科:权限是指为了保证职责的有效履行,任职者必须具备的,对某事项进行决策的范围和程度。 对于任何系统来说权限可控制是必不可少的。下面来说说我对权限的理解! 权限涉及到用户,角色,菜...
  • hejingyuan6
  • hejingyuan6
  • 2014年01月23日 13:42
  • 2633

灵活控制权限

继上篇《C#读取配置文件信息》        上篇提到读取配置文件信息,其中读取一般文件的信息目的是更加灵活地分配权限。用或的信息具体干什么在这里给大家细细道来。        为了让效果更佳,用对比...
  • u013037201
  • u013037201
  • 2016年04月08日 15:47
  • 663

大数据灵活查询的一个思路

查询平台意义在于解决实时的多维度关联查询,整体对外以JSON方式交互以及提供功能。 具体实现:         在服务端接受到json请求后,交给查询组件doggie-search-eng...
  • DENGZHUYU
  • DENGZHUYU
  • 2014年06月19日 13:52
  • 864

spring回滚事务

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:aop="http://www.springframework.org/sch...
  • icoudsoft_saas
  • icoudsoft_saas
  • 2016年01月20日 13:21
  • 223

Spring手动回滚事务

Spring Aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样Aop代理才能捕获到方法的异常,才能进行回滚,默认情况下Aop只捕获RuntimeExcetpion的异常,但可...
  • qq724581322
  • qq724581322
  • 2016年05月16日 18:25
  • 11694
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:灵活地回滚事务
举报原因:
原因补充:

(最多只允许输入30个字)