关于回滚

关于回滚

我这里把回滚的操作注释掉了,正常的情况1000条数据照常写入;异常的情况,一条也写不进,而且同样会报错。所以想问一下,这里的回滚的目的是什么,没有回滚的话会照成什么样的后果

http://img1.sycdn.imooc.com//climg/607ed245099ded5807380250.jpg

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

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕阿满 2021-04-21 10:19:20

同学你好,回滚的目的是当事务执行过程发生异常,将数据回滚到事务未开始时的数据。

如果没有开启事务,当发生异常时,部分数据仍然可以插入到数据库中,如:

http://img1.sycdn.imooc.com//climg/607f8a52097299fa09190298.jpg

http://img1.sycdn.imooc.com//climg/607f8af609c76f7b05790189.jpg


同学说的去掉回滚的操作,抛出异常并且数据库中没有添加数据。同学应该是开启了事务,如果开启了事务,则必须有事务提交或者回滚,成功则提交事务,回滚则将数据还原。同学去掉了回滚操作,该事务没有结束,会影响到其他事务或操作。

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师