JAVA jdbc封装 DbUtil 类2.0-增加事务功能

说明

增加事务功能:

  • 获取数据库连接,且设置不自动提交
  • 提交事务
  • 回滚事务

增加方法

增加 数据库连接 方法

详见:https://www.malaoshi.top/show_1IX6xhiHkZQw.html

增加 提交事务 方法

public void commit() throws SQLException{
    conn.commit();
}

增加 回滚事务 方法

public void rollback() throws SQLException {
    conn.rollback();
}

完整代码

需要继承 JAVA jdbc封装 DbUtil 类 1.1 中的类

import java.sql.DriverManager;
import java.sql.SQLException;

public class DbUtils2 extends DbUtils1_1{


    public void commit() throws SQLException{
        conn.commit();
    }

    public void rollback() throws SQLException {
        conn.rollback();
    }


}

测试代码

public class DbUtils2Test {

    public static void main(String[] args) throws Exception{

        //===关键,设置不自动提交==============
        Connection conn = ConnectionFactory.connect("com.mysql.jdbc.Driver" 
                , "jdbc:mysql://127.0.0.1:3308/scott?useSSL=false&useUnicode=true&characterEncoding=utf-8"
                ,"root"
                ,""
                ,false)

        DbUtils2 db=new DbUtils2();
        db.setConnection(conn)
        try{
            //从马云账户减掉100
            String sql="update account set money=money-? where aid=?";
            db.update(sql, 100,1);

            //======关键,演示一个错误==============
            /*
             * 运行该行代码时会报错,不再执行下面代码
             * 然后执行catch部分,会执行 rollback(),数据恢复到初始值
             * 如果注释掉该行代码,不会报错,会执行 commit(),就提交到数据库
             */
            int i=1/0;

            //给李雷账户加上100
            String sql2="update account set money=money+? where aid=?";
            db.update(sql2, 100,2);

            //====关键:上面代码都执行成功,就提交事务,增删改操作才会保存到数据库
            //====注意: 数据库连接为 非自动提交 时,不执行此代码,不会保存到数据库
            db.commit();
        }catch(Exception e){
            //====关键:报错后,就回滚事务,数据恢复到初始值
            db.rollback();
            e.printStackTrace();
        }
        db.close();
    }

}

原文出处:/show_1IX2iXvrIKqt.html