什么是事务:

  事务,就是一组操作数据库的动作集合。

  一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。

  事务必须满足ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)的缩写。

  事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持久性表示当系统或介质发生故障时,确保已提交事务的更新不能丢失。持久性通过数据库备份和恢复来保证。

 

Java中的事务处理

  一般J2EE服务器支持三种类型的事务管理。即:JDBC事务,JTA事务,容器管理事务。

  最好不要在程序中同时使用上述三种事务类型;并且,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。下面举两个例子说明JDBC及JTA事务,容器管理事务是在特定的框架中实现的(如:Spring的事务管理)

1. JDBC事务

  public String delete(String id) {
    String ID = id;
    db = new getConnection();
    Connection con = db.getConnection();
    try {
      con.setAutoCommit(false);
      db.executeUpdate("delete from helloworld where ID=" + ID); //更新操作1
      db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
          db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3
          con.commit();//提交JDBC事务
          con.setAutoCommit(true); 
              db.close();
          return “success”;
       }catch (Exception e) {
      con.rollBack();//回滚JDBC事务
      e.printStackTrace();
      db.close();
      return “fail”;
    }
  }

  如上例:更新操作1,2,3只有当三步操作都成功完成才进行提交,否则回滚已经进行的操作。这样,保证了数据的完整性,不会因为突然断电等特殊情况导致的数据错误。

 2.JTA事务

  JTA是J2EE事务服务的解决方案、描述了J2EE模型事务接口。JTA具有三个主要的接口:UserTransaction、TransactionManager、Transaction接口。这些接口共享公共的事务操作,如:commit()、rollback()。同时各自也有自己的操作。举例说明:

  public String delete(String id) {
    String ID = id;
    db = new getConnection();
    db.getConnection();
    UserTransaction transaction = sessionContext.getUserTransaction();//获得JTA事务
    try {
      transaction.begin(); //开始JTA事务
      db.executeUpdate("delete from helloworld where ID=" + ID);
      db.executeUpdate("delete from helloworld _book where ID=" + ID);
      db.executeUpdate("delete from helloworld _user where ID=" + ID);
      transaction.commit(); //提交JTA事务
      db.close();
      return”success”;
    } catch (Exception e) {
      try {
        transaction.rollback();//事务回滚
      }catch (Exception e) {
        e.printStackTrace();
      }
       exc.printStackTrace();
       db.close();
       return “fail”;
     }
      }

3.容器事务管理

  在Spring、Hibernate等框架中都有各自的事务管理功能。虽然表现形式有些差别,但都是在JAVA事务管理的基础上实现的。这里不进行介绍。

转载于:https://www.cnblogs.com/ximumuqing/p/7473805.html

java中事务的管理相关推荐

  1. 形式参数内存在哪java_深入浅出Java中JVM内存管理

    原标题:深入浅出Java中JVM内存管理 Java岗位面试,JVM是对程序员基本功考察,通常会问你对JVM了解吗?可以分几部分回答这个问题,首先JVM内存划分 | JVM垃圾回收的含义 | 有哪些GC ...

  2. JAVA中GridBagLayout布局管理器应用详解

    很多情况下,我们已经不需要通过编写代码来实现一个应用程序的图形界面,而是通过强大的IDE工具通过拖拽辅以简单的事件处理代码即可很轻松的完成.但是我们不得不面对这样操作存在的一些问题,有时候我们希望能够 ...

  3. java jvm内存模型_Java(JVM)内存模型– Java中的内存管理

    java jvm内存模型 Understanding JVM Memory Model, Java Memory Management are very important if you want t ...

  4. Java中的会话管理– HttpServlet,Cookie,URL重写

    Session Management in Java Servlet Web Applications is a very interesting topic. Session in Java Ser ...

  5. java初学者指南_企业Java中事务隔离级别的初学者指南

    java初学者指南 介绍 基于ACID事务属性的关系数据库强一致性模型. 在本文中,我们将阐明对资源本地事务和JTA事务使用不同的事务隔离级别和各种配置模式的背后原因. 隔离和一致性 在关系数据库系统 ...

  6. 企业Java中事务隔离级别的初学者指南

    介绍 基于ACID事务属性的关系数据库强一致性模型. 在本文中,我们将阐明对资源本地事务和JTA事务使用不同的事务隔离级别和各种配置模式的背后原因. 隔离和一致性 在关系数据库系统中,原子性和持久性是 ...

  7. Java中事务的处理全解析

    ava的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先前的 ...

  8. java中事务的介绍

    2019独角兽企业重金招聘Python工程师标准>>> java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务.如果数据库操作在某 一步没有执行或出现异常而导致 ...

  9. java中事务并发问题是_事务必会必知

    作者:泥瓦匠 原文链接:传送门 事务,大家所熟悉的事务(Transaction),基本上会就往Spring事务靠.其实Spring事务管理基于底层数据库本身的事务处理机制.数据库事务的基础,是掌握Sp ...

最新文章

  1. HackTheGame 攻略 - 第三关
  2. Shell脚本之七 选择、循环结构
  3. linux内存机制的virt,关于linux:转载理解virt-res-shr之间的关系
  4. java基于ssm的个人博客系统_一个基于 Spring Boot 的开源免费博客系统
  5. 已知多个同比增速和现期,快速比较多个对象间的增量
  6. 各个版本eclipse官方下载地址
  7. 所谓“卡常数”的常数到底指什么?
  8. axure 调整中继器列宽_Axure RP 8教程 - 中继器功能改进
  9. 桌面文件删除不掉的解决方案
  10. 加大货币发行量 quantitative easing
  11. 内嵌汇编(ARM64)
  12. 新春特辑 | 智慧城市专题合辑 报告下载
  13. Qt - 从零到壹的 打地鼠 游戏
  14. NOSQL,Redis的常用数据类型
  15. Jquery选择器(一)
  16. Matplotlib官方文档学习笔记 PART1-简介 C2-pyplot教程 (19-12-4 by-xieyuxin)
  17. [转]黑客入侵应急分析手工排查
  18. java的splititeration,Java Spliterator.estimateSize方法代碼示例
  19. collect2.exe | [Error] ld returned 1 exit status怎么办
  20. 代理模式——案例分析与代码演示

热门文章

  1. jsp - 9 内置对象application详解
  2. C#写Windows系统日志(EventLog)
  3. 解耦知识蒸馏,让Hinton在7年前提出的方法重回SOTA行列(CVPR 2022)
  4. 视频异常行为检测算法MPN,在多个数据库上达到SOTA
  5. ECCV 2020 论文大盘点-图像与视频分割篇
  6. 资深程序员才知道的30个Python技巧
  7. 零基础想学Python,明白这2点,越快年薪30W
  8. CVTE【嵌入式应用开发】【软件技术支持】面经【已拿offer】
  9. 3D重建 | 近5年前沿方法引用量TOP10工作汇总
  10. 黑猿大叔-译文 | TensorFlow实现Batch Normalization