JDBC入门中,关于事务有几点小疑问。

JDBC入门中,关于事务有几点小疑问。

1、如果没有发生unchecked exception而是断电什么,数据怎么办,还能和MySQL一样下次继续执行?

2、事务直接用在SQL语句里,还是用在Java里好?

​3、事务rollback()为什么还要“if(conn!=null&&!conn.isClosed())”判断?

正在回答

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

1回答

同学你好,1、同学是想说,在如下位置中,如果没有发生unchecked exception异常,而是发生了断电,此时数据会发生什么变化吗?

http://img1.sycdn.imooc.com//climg/61273fe2094a406f09760165.jpg

如果是,这些数据并不会存入数据库中,因为事务具有一致性,事务里的 SQL 要么全部执行成功,要么全部执行失败,这里事务中的SQL语句还没有执行完成,所以此时就没有提交,也就不会写入表中。

​    ​关于是否还能和MySQL一样下次继续执行,这里并不会在下次继续执行,因为这里sql语句并没有执行完,此时事务并没有提交,所以并不会在数据库中存在记录。

关于断电是对应的操作,同学如果有兴趣可以自己去深入了解一下。

    ​2、建议在java代码中使用事务,因为可能某个功能需要使用不同的业务流程,在java代码中使用事务更加方便。

    ​3、conn!=null-->是不为空的判断,如果conn是空,此时就不能执行close操作,避免出现空指针异常。

    ​    ​isClosed-->是判断是否关闭,如果没有关闭会返回flase,这里是为了防止在finally执行之前已经关闭过conn,所以为了代码的严谨性,在这里做了此判断。所以这里是为了避免conn出现为空或者conn已经关闭,就不用再次执行close操作了。

祝学习愉快~

  • 童真模式启动 提问者 #1
    1、redo、undo日志在Java就失效了?


    2021-08-27 09:10:40
  • 同学你好,没有失效,undo日志用于存放数据被修改前的值,如果一个事务做回滚或某种原因执行失败了,需要根据undo日志中记录的原数据做数据恢复;而redo日志是每次操作都先记录到redo日志中,当出现实例故障(像断电),导致数据未能更新到数据文件,则数据库重启时须redo,重新把数据更新到数据文件,也就是说隔离级别会涉及到redo的

    祝学习愉快~

    2021-08-27 10:06:48
  • java里用了事务,mysql里是不是不需要用事务了?;还有啊,MySQL里用事务是指在prepareStatement(…)里写start transaction、commot/rollback还是用的别的什么办法?

    2021-08-28 11:24:44
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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