java实践攻关一JDBC事务处理

为什么要使用事务回滚?

当你有一堆的sql语句需要去执行,并且都需要成功才能修改数据库数据,如果某条sql语句执行失败,那么回到修改之前的状态
你可能想到我先把之前的数据先记录在缓冲区,如果某条sql执行失败,再从缓冲区恢复之前的数据。
那么问题来了,几条数据这样可以实现,但是如果有成千上万几十万数据呢?
sql事务回滚可以完美的解决。

如何实现JDBC的事务回滚

  1. 用到的package

    • java.sql.*
  2. 实现方法

    • 第一步,建立jdbc连接
    • 第二步,取消事务自动提交
    • 第三步,创建事务对象
    • 第四步,向事物对象中添加sql语句,并在事物对象内执行
    • 第五步,提交事务
    • 第六步,关闭连接
  3. 事务回滚错误捕捉,在每一步操作中,都需要进行错误捕捉,当出现错误时,使用事务回滚来回到初始状态

  4. 示例

    public int exec() {
        int flag = 0;
        Connection conn = null;
        String sqlImport = "";
        // 连接数据库
        try{
            conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/icontrol?useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8","root","******");
            // 取消事务自动提交
            conn.setAutoCommit(false);
        }catch(Exception e){
            e.printStackTrace();
        }
        // 创建事务对象
        try{
            //Assume a valid connection object conn
            conn.setAutoCommit(false);
            Statement stmt = conn.createStatement();

            // 事务一:修改数据库现有数据
            String sql1 = "UPDATE whitelist SET DelMark = 1";
            stmt.executeUpdate(sql1);
            // 事务二: 
            String sql2 = "INSERT INTO whitelist (`IMSI`, `PhoneNUM`, `Tagging`) VALUES ('460045456560000', '18588888888', '测试接口');";
            stmt.executeUpdate(sql1);
            // ......

            // If there is no error, commit it.
            conn.commit();
            flag = 1;
        }catch(SQLException se){
            // If there is any error.
            try {
                // 出现错误时,事务回滚
                conn.rollback();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            flag = 0;
        }
        return flag;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值