概述
JDBC-MYSQL事务
- 概述
- 开启事务
- 提交事务
- 回滚
- 设置回滚点
- 回滚到回滚点
- 代码展示
前情提要:JDBC-MYSQL基础.
概述
一个事务可以有一至无数个SQL语句操作,当全部事务中的所有代码没有报错才添加到数据库服务器执行,当中途出现错误则回滚到事务开始之前,中间执行过的SQL语句全部撤回。
开启事务
mysql默认是不开启事务的,每执行一条sql语句就自动提交一次
connection.setAutoCommit(false);//开启事务
开启了事务只有手动提交事务才可完成sql语句操作
提交事务
提交此次事务的使用sql语句操作
connection.commit();
回滚
当程序或数据库出错时,将事务回滚到开启前
connection.rollback();
设置回滚点
Savepoint savepoint = connection.setSavepoint();
回滚到回滚点
回滚到回滚点需要添加事务,因为要提交事务开启到回滚点的sql语句操作
if(savepoint!=null){//判断是否在回滚点前发生了错误
connection.rollback(savepoint);
connection.commit();
}else {//未到回滚点则全部回滚
connection.rollback();
}
【注意】:所有的回滚代码都需要放在最大错误的catch代码中,因为需要捕捉到所有可能发生的错误,然后回滚事务
代码展示
/**
* @program: JDBC
* @description: TODO
* @author: 吐鲁番
* @Date: 2020/8/21
* @Time: 21:03
**/
public class transactionJDBC {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement prepar = null;
Savepoint savepoint = null;
ResultSet resultSet = null;
try {
connection = JDBCutils.getConnection();
connection.setAutoCommit(false);//开启事务
//执行sql操作
prepar = connection.prepareStatement("UPDATE a SET age=? WHERE id=?");
prepar.setString(1, "1");
prepar.setInt(2, 1);
prepar.executeUpdate();
savepoint = connection.setSavepoint();//设置回滚点
int i = 3 / 0;//发生错误
//执行sql操作
prepar = connection.prepareStatement("UPDATE a SET age=? WHERE id=?");
prepar.setString(1, "2");
prepar.setInt(2, 2);
prepar.executeUpdate();
connection.commit();//提交事务
} catch (Exception e) {
if (savepoint != null) {//判断是否在回滚点前发生了错误
try {
//回滚到设置点
connection.rollback(savepoint);
//提交事务
connection.commit();
} catch (SQLException e1) {
e1.printStackTrace();
}
} else {//未到回滚点则全部回滚
try {
connection.rollback();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
e.printStackTrace();
} finally {
JDBCutils.close(connection, prepar, resultSet);//关闭资源
}
}
}
最后
以上就是儒雅大船为你收集整理的JDBC-MYSQL事务的全部内容,希望文章能够帮你解决JDBC-MYSQL事务所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复