说明
增加事务功能:
- 获取数据库连接,且设置不自动提交
- 提交事务
- 回滚事务
增加方法
增加 数据库连接 方法
详见: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();
}
}