jdbc处理事务操作

1.关于事务

前提:如果有多个操作,则必须保证所有的操作都同时使用一个连接,则无法保证事务
①:开启事务,取消Connection的默认提交功能
connection.setAutoCommit(false);
②:具体操作步骤
③:操作成功则提交事务,抛出异常则回滚事务(在catch块中)
connection.commit(); / connection.rollback();

2.事务的ACID属性

原子性:事务是一个不可分割的工作单位,事务中的操作要么都发送,要么都不发生
一致性:事务必须使数据库从一个一致性状态变换到另外一个一致性状态
隔离性:事务的隔离性是指一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务直接不能互相干扰
持久性:事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来的其他操作和数据库故障不应该对其有任何影响



public class TransactionTest {
    @Test
    public void testTransaction() {
        Connection connection = null;
        try {
            //获取连接
            connection = JDBCTools.getConnection();
            //取消事务的默认提交功能
            connection.setAutoCommit(false);
            String sql = "UPDATE users SET balance = 500 WHERE id = 1";
            //执行更新操作
            update(connection, sql);
            //指定抛出异常,执行事务回滚
            int result = 10 / 0;
            System.out.println(result);
            
            sql = "UPDATE users SET balance = 1500 WHERE id = 2";
            //执行更新操作
            update(connection, sql);
            //若无异常,则提交事务
            connection.commit();
        } catch (Exception e) {
            e.printStackTrace();
            try {
                //若发生异常,则执行事务的回滚
                connection.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        } finally {
            JDBCTools.release(null, null, connection);
        }
    }

    //更新方法
    public void update(Connection connection,String sql,Object ...args){
        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = connection.prepareStatement(sql);
            for(int i = 0;i < args.length;i++){
                preparedStatement.setObject(i+1, args[i]);
            }
            preparedStatement.executeUpdate();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            JDBCTools.release(null, preparedStatement, null);
        }
    }
}

程序发生异常后,数据库并未发生改变,成功执行回滚功能
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值