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、付费专栏及课程。

余额充值