什么是事物

事物是应用程序中一系列操作,事物完成是指所有的操作都完成,事物不完成是指一个操作也不能完成,事物结束有两种情况,当事务中的所有步骤全部完成时,事务提交,如果一个步骤失败,则发生回滚操作,撤销之前所有的操作。

事物的四个特征

  • 原子性:事物是数据库操作的逻辑工作单位,事物包含的操作要么全做,要么一个也不做。
  • 一致性:事 务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。因此当数据库只包含成功事务提交的结果时,就说数据库处于一致性状态。如果数据库系统 运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是 不一致的状态。
  • 隔离性:一个事务的执行不能其它事务干扰。即一个事务内部的操作及使用的数据对其它并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
  • 持续性:也称永久性,指一个事务一旦提交,它对数据库中的数据的改变就应该是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。

事务提交与回滚(commit与rollback)

commit:提交事务,会将磁盘缓存中的数据写入磁盘的数据库中,一般数据库是自动提交,因此修改以后数据库就会发生变化。
rollback:数据回滚,将事务中已经执行成功的部分回到最初的状态。

举例:银行转账,a将100元转给b,存在两个对数据库更新的操作,首先更新a的金额减小100,之后将b的金额增加100。如果a金额减少以后,发送异常,则回滚,将a的金额回到初始状态。
上代码:

public void testTransaction(){Connection conn = null;PreparedStatement ps = null;ResultSet rs = null;try {conn = JDBCUtil.getConn();//连接数据库//连接,事务默认就是自动提交的。 关闭自动提交。conn.setAutoCommit(false);//关闭自动提交事务String sql = "update account set money = money - ? where id = ?";ps = conn.prepareStatement(sql);//扣钱, 扣ID为1 的100块钱ps.setInt(1, 100);ps.setInt(2, 1);ps.executeUpdate();int a = 10 /0 ;//异常发生部分//加钱, 给ID为2 加100块钱ps.setInt(1, -100);ps.setInt(2, 2);ps.executeUpdate();//成功: 提交事务。conn.commit();} catch (SQLException e) {try {//事变: 回滚事务conn.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally {JDBCUtil.release(conn, ps, rs);//关闭连接}
}

后面会更新,关于异常抛不抛出对事物回滚的影响,及其操作方法。
代码之路何其漫长,且听我慢慢道来!!!

Java后端之数据库操作事务回滚相关推荐

  1. jsp mysql事务锁,JSP操作数据库的事务回滚

    基础介绍 1.先设置为手动提交 conn.setAutoCommit(false); //将自动提交设置为false 2.若成功则提交 conn.commit(); //当操作成功后手动提交 3.若失 ...

  2. springboot+事务,多张表的操作事务回滚

    第一步,在springboot的启动类上开启事务,注解 @EnableTransactionManagement 第二步:事务注解,回滚 @Transactional(rollbackFor = Ex ...

  3. thinkphp curd的事务回滚 一看就会

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/qq1355541448/article/details/32314403     /** *thin ...

  4. java pg数据库事务回滚,基于Postgresql 事务的提交与回滚解析

    用过oracle或mysql的人都知道在sqlplus或mysql中,做一个dml语句,如果发现做错了,还可以rollback;掉,但在PostgreSQL的psql中,如果执行一个dml,没有先运行 ...

  5. java pg数据库事务回滚_PG 事务提交与回滚

    在PostgreSQL中,如果执行一个dml或ddl语句,默认一执行完就马上提交了,不能回滚,这样容易导致误操作的发生,避免这个风险的办法是关闭自动提交 1 设置\set AUTOCOMMIT off ...

  6. java 单元测试_在springboot中写单元测试解决依赖注入和执行后事务回滚问题

    往期文章 「Java并发编程」谈谈Java中的内存模型JMM 面试官:说说你知道多少种线程池拒绝策略 为什么不要在MySQL中使用UTF-8编码方式 前言 很多公司都有写单元测试的硬性要求,在提交代码 ...

  7. java rollback_Java Connection.rollback()方法:事务回滚

    Java Connection.rollback() 方法用于取消在当前事务中进行的更改,并释放当前 Connection 对象持有的所有数据库锁.此方法只有在手动事务模式下才可用. 语法1 roll ...

  8. java 事务回滚注解_Java Spring 事务回滚详解

    这篇文章主要介绍了java Spring事务回滚的相关资料,需要的朋友可以参考下 spring 事务回滚 1.遇到的问题 当我们一个方法里面有多个数据库保存操作的时候,中间的数据库操作发生的错误.伪代 ...

  9. java程序回滚之后在哪看_Java在触发事务回滚之后为什么会再一次回到Servlet开始的地方重新走一次流程?...

    代码流程 前台点击"提交订单"进入BaseServlet.class BaseServlet.class分发至子类OrderServlet.class的submitOrder()方 ...

最新文章

  1. 新的工作电脑 神州优雅A550-i7
  2. layui监听当前页_事件监听 · layui使用手册 · 看云
  3. R语言计算回归模型的SST、SSR以及SSE指标实战
  4. ngrep 比 tcpdump 更方便查看的抓包显示工具
  5. HikariCP连接池配置
  6. RIAMeeting第六次开发者交流活动。
  7. CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞
  8. python读取html中body_python批量获取html内body内容的实例
  9. 《快活帮》第二次作业:团队项目选题报告
  10. 算法心得1:由$nlogn$复杂度的LIS算法引起的思考
  11. CUDNN学习笔记(2)
  12. Linux 命令之 scp 文件传输
  13. 关于学习Java中常用类的总结
  14. Mac安装HomeBrewHomeBrew安装yarn
  15. 医药行业的销售数据如何分析?
  16. linux中tmp文件在哪,学习LINUX入门,/tmp文件夹
  17. 北德克萨斯大学计算机系,美国北德克萨斯大学计算机科学与工程系主任Barrett Bryant访问昆明理工大学...
  18. 200+JS功能 实例
  19. 在Unity2018如何使用代码一键设置Icon
  20. App是什么,可以分为几类?及其相关解释。

热门文章

  1. 立体视觉入门指南(4):相机标定之DLT直接线性变换【建议收藏】
  2. ubuntu双系统时间同步_解决Ubuntu19.10和windows双系统时间同步问题方法
  3. 中彩双色球彩票软件 红球预测专家 多特软件
  4. C#实现udp点对点通信的完整示例
  5. 电脑关机 重启 开机怎么看日志
  6. 使用爬虫+Flask获取世界国旗数据和孩子一起学习
  7. KFS Oracle RAC 数据解析同步配置方法
  8. Unity3D游戏开发之仿仙剑奇侠传角色控制效果
  9. 计算机提示msvcp110.dll丢失怎样修复?计算机中丢失msvcp110.dll,电脑找不到msvcp110.dll怎么办
  10. 老电工教你快速学会如何看懂电气控制电路图