关于回滚
来源:5-2 JDBC的手动事务开发技巧
慕少7077580
2021-04-20 21:10:44
我这里把回滚的操作注释掉了,正常的情况1000条数据照常写入;异常的情况,一条也写不进,而且同样会报错。所以想问一下,这里的回滚的目的是什么,没有回滚的话会照成什么样的后果
package com.imooc.jdbc.sample;
import com.imooc.jdbc.common.DbUtils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* JDBC的事务控制
*/
public class TransactionSample {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = DbUtils.getConnection();
//JDBC默认使用自动提交模式
conn.setAutoCommit(false);//关闭自动提交
String sql = "insert into employee(eno,ename,salary,dname) values(?,?,?,?)";
pstmt = conn.prepareStatement(sql);
for (int i = 1000; i <2000 ; i++) {
if (i==1005){
// throw new RuntimeException("插入失败");
}
pstmt.setInt(1,i);
pstmt.setString(2,"员工"+i);
pstmt.setFloat(3,4000f);
pstmt.setString(4,"市场部");
pstmt.executeUpdate();
}
conn.commit();//提交数据
} catch (Exception e) {
e.printStackTrace();
/*try {
if (conn!=null & !conn.isClosed()){
conn.rollback();
}
} catch (SQLException throwables) {
throwables.printStackTrace();
}*/
} finally {
DbUtils.closeConnection(null,pstmt,conn);
}
}
}
1回答
好帮手慕阿满
2021-04-21
同学你好,回滚的目的是当事务执行过程发生异常,将数据回滚到事务未开始时的数据。
如果没有开启事务,当发生异常时,部分数据仍然可以插入到数据库中,如:
同学说的去掉回滚的操作,抛出异常并且数据库中没有添加数据。同学应该是开启了事务,如果开启了事务,则必须有事务提交或者回滚,成功则提交事务,回滚则将数据还原。同学去掉了回滚操作,该事务没有结束,会影响到其他事务或操作。
祝学习愉快~