为什么要使用事务回滚?
当你有一堆的sql语句需要去执行,并且都需要成功才能修改数据库数据,如果某条sql语句执行失败,那么回到修改之前的状态
你可能想到我先把之前的数据先记录在缓冲区,如果某条sql执行失败,再从缓冲区恢复之前的数据。
那么问题来了,几条数据这样可以实现,但是如果有成千上万几十万数据呢?
sql事务回滚可以完美的解决。
如何实现JDBC的事务回滚
用到的package
- java.sql.*
实现方法
- 第一步,建立jdbc连接
- 第二步,取消事务自动提交
- 第三步,创建事务对象
- 第四步,向事物对象中添加sql语句,并在事物对象内执行
- 第五步,提交事务
- 第六步,关闭连接
事务回滚:错误捕捉,在每一步操作中,都需要进行错误捕捉,当出现错误时,使用事务回滚来回到初始状态
示例
public int exec() {
int flag = 0;
Connection conn = null;
String sqlImport = "";
// 连接数据库
try{
conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1/icontrol?useSSL=false&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8","root","******");
// 取消事务自动提交
conn.setAutoCommit(false);
}catch(Exception e){
e.printStackTrace();
}
// 创建事务对象
try{
//Assume a valid connection object conn
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
// 事务一:修改数据库现有数据
String sql1 = "UPDATE whitelist SET DelMark = 1";
stmt.executeUpdate(sql1);
// 事务二:
String sql2 = "INSERT INTO whitelist (`IMSI`, `PhoneNUM`, `Tagging`) VALUES ('460045456560000', '18588888888', '测试接口');";
stmt.executeUpdate(sql1);
// ......
// If there is no error, commit it.
conn.commit();
flag = 1;
}catch(SQLException se){
// If there is any error.
try {
// 出现错误时,事务回滚
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
flag = 0;
}
return flag;
}