JDBC事务的保存点处理

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值