JAVA jdbc封装 DbUtil 类2.0-增加事务功能 作者:马育民 • 2022-02-04 17:11 • 阅读:10084 # 说明 增加事务功能: - 获取数据库连接,且设置不自动提交 - 提交事务 - 回滚事务 # 增加方法 ### 增加 数据库连接 方法 详见: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](https://www.malaoshi.top/show_1IX2ylsjk3RS.html "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(); } } ``` 原文出处:http://malaoshi.top/show_1IX2iXvrIKqt.html