【学习笔记】JDBC操作事务

JDBC操作事务

事务的原则:ACID

  • 原子性:全部成功,或全部失败

  • 一致性:事务执行前后数据一致

  • 隔离性:两个事务互不干扰

  • 持久性:一旦提交,不可不可逆,持久化到数据库

 

隔离性带来的问题

脏读:一个事务读取到了另一个事务没有提交的数据

不可重复度:在一个事务内,多次读取,数据发生变化

幻读(虚读):在一个事务内,读取到了别人插入的数据,导致前后读出来的数据不一致

 

JDBC操作事务

connection 代表数据库

package com.lesson04;
​
import com.lesson02.utils.JdbcUtils;
​
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
​
public class JDBCAffairs {
    public static void main(String[] args) throws SQLException {
        Connection connection = JdbcUtils.getConnection();
        PreparedStatement ps = null;
        //关闭自动提交,自动开启事务
        connection.setAutoCommit(false);
​
        String sql1 = "update account set money = money-100 where `NAME` = '张三'";
        ps = connection.prepareStatement(sql1);
        ps.executeUpdate();
​
        String sql2 = "update account set money = money+100 where `NAME` = '李四'";
        ps = connection.prepareStatement(sql2);
        ps.executeUpdate();
​
        //提交事务
        connection.commit();
        System.out.println("提交成功");
        //回滚,即使不显示定义,事务提交失败也会自动回滚
        connection.rollback();
        //开启自动提交
        connection.setAutoCommit(true);
        JdbcUtils.release(connection,ps,null);
    }
}

 

如果在提交事务之前,加一条错误的语句 如 int i = 1/0;

那么事务就会回滚

image-20221006153911498

 

posted @ 2022-10-06 16:01  GrowthRoad  阅读(14)  评论(0编辑  收藏  举报