`
no_bao
  • 浏览: 309815 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JDBC事务的保存点处理

    博客分类:
  • java
阅读更多
JDBC事务的保存点处理

  在JDBC的事物处理中,可以应用保存点技术,对一个事物中的处理进行部分提交.
  如下示例,三个处理
  1,张三减10元
  2,李四加10元
  3,李四加100元,
  在3的地方出错的话,把1和2的处理进行提交,使用了保存点技术.
  示例代码:

 package test.jdbc;
  import java.sql.Connection;
  import java.sql.DriverManager;
  import java.sql.PreparedStatement;
  import java.sql.Savepoint;
  public class SavePoint {
  public static void main(String[] args) throws Exception {
  savepoint();
  }
  public static void savepoint() throws Exception {
  // TODO Auto-generated method stub
  System.setProperty("jdbc.drivers", "com.mysql.jdbc.Driver");
  Connection conn = DriverManager.getConnection(
  "jdbc:mysql://localhost:3306/jdbc", "root", "");
  //初始化不自动提交
  conn.setAutoCommit(false);
  // 张三减10元
  String sql = "update user set money = money - 10 where id = 1";
  PreparedStatement st = conn.prepareStatement(sql);
  st.executeUpdate();
  // 李四加10元
  sql = "update user set money = money + 10 where id = 2";
  st = conn.prepareStatement(sql);
  st.executeUpdate();
  // 设立保存点
  Savepoint sp = conn.setSavepoint();
  // 李四加再加100元(SQL的where关键字写的不对,会出现异常)
  sql = "update user set money = money + 100 wherewhere id = 2";
  st = conn.prepareStatement(sql);
  try {
  st.executeUpdate();
  } catch (Exception e) {
  // 回滚到李四加10元后的状态
  conn.rollback(sp);
  System.out.println ("回滚到李四加10元后的状态");
  }
  conn.commit();
  st.close();
  conn.close();
  }
  }
  执行文件后,查看数据库的记录,可以发现张三减少了10元,而李四增加了10元.
  第三个处理李四再加100元的操作并没有进行.
  总结:
  1,开始要把connection设置成不进行自动提交
  2,中间设定保存点
  3,回滚的地方要使用保存点
  4,最后不要忘记进行commit
分享到:
评论

相关推荐

    你不知道的JDBC高级应用

    1.批处理:对数据库的CRUD速度会有质...7.事务:设定事务的保存点,可以把事务隔离. crud c:create r:read u:update d:delete JTA 分布式事务 跨数据库的事务 JNDI TomCat 方便分布式处理 dbcp JDBC连接池 ............

    jdbc基础和参考

    JDBC:本身自动帮我做事务管理的操作 AutoCommit = true; Connection.setAutoCommit(false); 正常: conn.commit(); 异常: conn.rollback(); JDBC批处理: addBatch executeBatch Statement ...

    【分布式事务----LCN】LCN原理及使用方式.docx

    TxManager接受到补偿事务以后先通知补偿回调地址,然后再根据是否开启自动补偿事务状态来补偿或保存该次切面事务数据。 补偿事务机制 LCN的补偿事务原理是模拟上次失败事务的请求,然后传递给TxClient模块然后再次...

    modelAndLink 责任链模式 备忘录模式 单(双)链表 链表 显示“请稍后……"原理

    *如果有需要提供回滚操作的需求,使用备忘录模式非常适合,比如jdbc的事务操作,文本编辑器的Ctrl+Z恢复等。 3、单(双)链表:这个是数据结构方面的知识,代码有详细的说明。 4、显示 "正在加载,请稍后……" 原理

    Java数据编程指南

    Java数据库连接(JDBC) 什么是JDBC JDBC结构 开始起步 使用JDBC 一个简单的范例 对映Java与SQL类型 处理SQL错误 ResultSet与数据库元数据 JDBC中的事务处理 一个JDBC事务范例 ...

    DBJ.jar:一个开放源代码库,用于替换本机JDBC协议,DBJ.jar可以轻松地通过某种方法连接到数据库,因此用户必须在功能中提供凭据和参数,DBJ才能处理其余部分(连接,驱动程序管理器,准备的声明,结果集等)

    DBJ.jar 一个用于替换本机JDBC协议的JAR文件,可以通过调用某些方法来连接到数据库,因此用户只需在功能中提供凭据和参数,DBJ即可处理其余部分(连接,驱动程序管理器,准备好的语句) ,结果集等)要求为了构建和...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     20.5 Java应用通过Hibernate API声明JDBC事务  20.5.1 处理异常  20.5.2 Session与事务的关系  20.5.3 设定事务超时  20.6 Java应用通过Hibernate API声明JTA事务  20.7 Java应用通过JTA API声明JTA事务  ...

    iBATIS实战

    13.2.1 将其保存在类路径上 237 13.2.2 集中放置文件 238 13.2.3 主要按返回类型来组织映射文件 239 13.3 命名规范 239 13.3.1 语句的命名 239 13.3.2 参数映射的命名 239 13.3.3 结果映射的命名 240 13.3.4 XML文件...

    weixin024汽车保养系统+ssm(源码+部署说明+演示视频+源码介绍+lw).rar

    这个系统旨在为汽车维修店或汽车保养服务提供商提供一个管理客户信息、预约服务、跟踪维护历史和处理财务事务的平台。 技术栈介绍: Spring:一个开源的Java平台,它简化了企业级应用程序的开发。Spring提供了全面...

    EAS BOS V540 百问百答

    8. 部署的时候抛找不到jdbc的错误如何处理? 3 9. 部署过程中出现jarsigner.exe 的错误,请问如何解决? 4 10. 部署过程中出现“unable to rename old file(d:\kingdee\eas\server\lib\sp\eas_sp.jar)”to ...

    Hibernate实战(第2版 中文高清版)

     3.2.1 处理关注点渗漏   3.2.2 透明和自动持久化   3.2.3 编写POJO和持久化实体类   3.2.4 实现POJO关联   3.2.5 把逻辑添加到访问方法   3.3 ORM元数据   3.3.1 XML中的元数据   3.3.2 基于注解的...

    续集:续集:Ruby数据库工具包

    Sequel支持高级数据库功能,例如准备好的语句,绑定变量,保存点,两阶段提交,事务隔离,主/副本配置以及数据库分片。 Sequel当前具有适用于ADO,Amalgalite,IBM_DB,JDBC,MySQL,Mysql2,ODBC,Oracle,...

    ssh(structs,spring,hibernate)框架中的上传下载

    3在Spring中使用org.springframework.jdbc.support.lob.OracleLobHandler处理Oracle数据库的Blob类型字段。  通过这样的设置和配置,我们就可以象持久化表的一般字段类型一样处理Blob字段了。  以上是Spring+...

    Firebird数据库中文版

    锁优化机制也支持多个事务的保存点。 在线备份: 不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天) 的操作。 触发器: ...

Global site tag (gtag.js) - Google Analytics