`
java_frog
  • 浏览: 243839 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdbc中利用Savepoint实现rollback

 
阅读更多
首先我们来说一下setAutoCommit,当我们设置为true或默认情况下,jdbc事务会自动提交,当我们将setAutoCommit设为false时,虽然是手动提交事务,但是如果不写手动提交代码,最后也会提交。那有什么不一样呢,例如:我们在一个方法内多次执行数据库操作,中间有根据状态或上一返回值来确定是否回滚的情况下,如果是自动提交,那回滚就不起作用,如果是手动提交状态,那回滚就有效。

接下来还是看Savepoint
con.setAutoCommit(false);
			Savepoint first=con.setSavepoint("first");
			ps=con.prepareStatement("update  employees t set t.first_name='guohr1' where t.employee_id=207");
			flag=ps.executeUpdate();
			log.info("flag:"+flag);
			
			Savepoint second=con.setSavepoint("second");
			ps=con.prepareStatement("update  employees t set t.first_name='guohr2' where t.employee_id=207");
			flag=ps.executeUpdate();
			log.info("flag:"+flag);
			
			Savepoint third=con.setSavepoint("third");
			ps=con.prepareStatement("update  employees t set t.first_name='guohr3' where t.employee_id=207");
			flag=ps.executeUpdate();
			log.info("flag:"+flag);
			
			con.rollback(second);

    我在每次update前创建了一个回滚点,当最后rollback的时候如果参数如上为second,那么first_name='guohr1',如果参数为third,那么为guohr2,当然实际中不是像滚雪球一样这么随意滚的,可以根据前面返回的状态或值来判断是否需要回滚及滚到哪一步之前。
分享到:
评论
1 楼 qingfeng825 2011-10-20  
1、con.setAutoCommit(false);   不显示调用commit也会提交,是因为con.close()的时候会提交,是听别人这样讲的,找oracle JDBC的源码没有找到。

2、setSavepoint 方式挺好的,不过一般程序中都是用try{},只要有一个异常就全部回滚,不会仔细设计。

相关推荐

    java业务层框架开发ibatis(java源码)

    public void rollback(Savepoint savepoint) throws SQLException { } public void releaseSavepoint(Savepoint savepoint) throws SQLException { } public Statement createStatement(int resultSetType, int ...

    MySQL 5.1中文手冊

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

     Oracle 数据库中的SQL是当今市场上功能最强大的SQL实现之一,而本书全面展示了这一工具的威力。如何才能让更多人有效地学习和掌握SQL呢?Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习...

    mysql官方中文参考手册

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MYSQL中文手册

    言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 1.4. MySQL数据库管理系统概述 ...2.5.在Mac OS X中安装MySQL ...2.6. 在NetWare中安装...13.4.1. START TRANSACTION, COMMIT和ROLLBACK语法...

    MySQL 5.1官方简体中文参考手册

    2.7. 在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 2.8.6. 在Windows下从...

    mysql5.1中文手册

    在其它类Unix系统中安装MySQL 2.8. 使用源码分发版安装MySQL 2.8.1. 源码安装概述 2.8.2. 典型配置选项 2.8.3. 从开发源码树安装 2.8.4. 处理MySQL编译问题 2.8.5. MIT-pthreads注意事项 ...

    MySQL 5.1参考手册

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MySQL 5.1参考手册 (中文版)

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

    MySQL 5.1参考手册中文版

    目录 前言 1. 一般信息 1.1. 关于本手册 1.2. 本手册采用的惯例 1.3. MySQL AB概述 ...13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET ...

    MySQL5.1参考手册官方简体中文版

    13.4.4. SAVEPOINT和ROLLBACK TO SAVEPOINT语法 13.4.5. LOCK TABLES和UNLOCK TABLES语法 13.4.6. SET TRANSACTION语法 13.4.7. XA事务 13.5. 数据库管理语句 13.5.1. 账户管理语句 13.5.2. 表维护语句 13.5.3. SET...

Global site tag (gtag.js) - Google Analytics