JDBC——JDBC中的事务、DBUtils使用事务

什么是事务

1.概述:事务指的是逻辑上的一组操作,组成这组操作的单元,要不同时成功,要不同时失败
2.作用:保证在一个事务中,多次SQL操作要么同时成功,要么同时失败

JDBC操作事务

*事务管理流程
    1.开启事务
    2.执行多条SQL语句,如果没有出现错误,提交事务,将数据持久化存储到数据库
    3.执行多条SQL语句,如果出现错误,回滚事务,将事务状态回滚到开启事务之前
    4.关闭资源
*JDBC事务操作
    与事务操作相关的方法,都定义在java.sql.Connection接口中
    public void setAutoCommit(boolean flag):将此连接的自动提交模式为给定状态的flag
        **当flag=true:表示自动提交   
        **当flag=fasle:表示手动提交,开启事务
    public void commit():将数据持久化提交到数据库
    public void rollback: 回滚事务
    
*步骤:
    1.获取Conection连接对象
    2.开启事务 setAutoCommit(false)
    3.定义sql语句
    4.获取PreparedStatement对象
    5.执行sql语句,获得结果
    6.如果sql语句正常执行,没有问题,提交事务
    7.处理结果
    8.如果sql语句执行错误,回滚事务
    9.关闭资源
*代码体现:
    public class Jdbc_affairDemo8 {
public static void main(String[] args) {
    Connection conn = null;
    PreparedStatement pstmt1 = null;
    PreparedStatement pstmt2 = null;

    //1. 获取连接
    try {
        conn = JDBCUtils.getConnection();
        // 建立连接后开启事务
        conn.setAutoCommit(false);

        //2. 定义sql
        //2.1 张三 - 500
        String sql1 = "update account set balance = balance - ? where id = ?";
        //2.2 李四 + 500
        String sql2 = "update account set balance = balance + ? where id = ?";

        //3. 获取执行的sql对象
        pstmt1 = conn.prepareStatement(sql1);
        pstmt2 = conn.prepareStatement(sql2);

        //4. 设置参数
        pstmt1.setDouble(1, 500);
        pstmt1.setInt(2, 1);

        pstmt2.setDouble(1, 500);
        pstmt2.setInt(2, 2);

        //5. 执行sql
        pstmt1.executeUpdate();
        // 手动制造异常
        int i = 3 / 0;
        pstmt2.executeUpdate();

        // 提交事务
        conn.commit();

    } catch (SQLException e) {
        // 事务回滚
        if (conn != null) {
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
        }
        e.printStackTrace();
    } finally {
        JDBCUtils.close(pstmt1, conn);
        JDBCUtils.close(pstmt2, null);
    }
}

}

相关推荐