java事务管理 (转)

摘要:
什么是交易:首先,谈谈什么是交易。在我看来,事务是一组操作数据库的操作。事务是现代数据库理论的核心概念之一。如果一组处理步骤全部发生或未执行,我们将这组处理步骤称为事务。当所有步骤都像操作一样执行时,我们称事务为提交。如果某些或多个步骤未能执行,导致没有提交任何步骤,则必须将事务回滚到原始系统状态。交易必须符合ISO/IEC制定的ACID原则。ACID是原子的(a
什么是事务:
首先,说说什么事务。我认为事务,就是一组操作数据库的动作集合。
事务是现代数据库理论中的核心概念之一。如果一组处理步骤或者全部发生或者一步也不执行,我们称该组处理步骤为一个事务。当所有的步骤像一个操 作一样被完整地执行,我们称该事务被提交。由于其中的一部分或多步执行失败,导致没有步骤被提交,则事务必须回滚到最初的系统状态。
事务必须服从ISO/IEC所制定的ACID原则。ACID是原子性(atomicity)、一致性(consistency)、隔离性 (isolation)和持久性(durability)的缩写。事务的原子性表示事务执行过程中的任何失败都将导致事务所做的任何修改失效。一致性表示 当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态。隔离性表示在事务执行过程中对数据的修改,在事务提交之前对其他事务不可见。持 久性表示当系统或介质发生故障时,确保已提交事务的更新不能丢失。持久性通过数据库备份和恢复来保证。
Java中的事务处理
一般J2EE服务器支持三种类型的事务管理。即:JDBC事务,JTA事务,容器管理事务。
最好不要在程序中同时使用上述三种事务类型;并且,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。下面举两个例子说明JDBC及JTA事务,容器管理事务是在特定的框架中实现的(如:Spring的事务管理)
1. JDBC事务
java事务管理 (转)第1张public String delete(String id) {
java事务管理 (转)第2张String ID 
= id;
java事务管理 (转)第2张 db 
= new getConnection();
java事务管理 (转)第2张 Connection con 
= db.getConnection();
java事务管理 (转)第5张 
try {
java事务管理 (转)第2张con.setAutoCommit(
false);
java事务管理 (转)第2张db.executeUpdate(
"delete from helloworld where ID=" + ID); //更新操作1
java事务管理 (转)第2张
  db.executeUpdate("delete from helloworld _book where ID=" + ID); //更新操作2
java事务管理 (转)第2张
  db.executeUpdate("delete from helloworld_user where ID=" + ID); //更新操作3
java事务管理 (转)第2张
  con.commit();//提交JDBC事务
java事务管理 (转)第2张
  con.setAutoCommit(true); 
java事务管理 (转)第2张db.close();
java事务管理 (转)第2张
return “success”;
java事务管理 (转)第14张 }

java事务管理 (转)第5张 
catch (Exception e) {
java事务管理 (转)第2张  con.rollBack();
//回滚JDBC事务
java事务管理 (转)第2张
  e.printStackTrace();
java事务管理 (转)第2张db.close();
java事务管理 (转)第2张
return “fail”;
java事务管理 (转)第14张  }

java事务管理 (转)第21张}

java事务管理 (转)第22张
 
如上例:更新操作1,2,3只有当三步操作都成功完成才进行提交,否则回滚已经进行的操作。这样,保证了数据的完整性,不会因为突然断电等特殊情况导致的数据错误。
 
2.JTA事务
JTA是J2EE事务服务的解决方案、描述了J2EE模型事务接口。JTA具有三个主要的接口:UserTransaction、 TransactionManager、Transaction接口。这些接口共享公共的事务操作,如:commit()、rollback()。同时各 自也有自己的操作。举例说明:
 
java事务管理 (转)第1张public String delete(String id) {
java事务管理 (转)第2张 String ID 
= id;
java事务管理 (转)第2张 db 
= new getConnection();
java事务管理 (转)第2张 db.getConnection();
java事务管理 (转)第2张 UserTransaction transaction 
= sessionContext.getUserTransaction();//获得JTA事务
java事务管理 (转)第5张
 try {
java事务管理 (转)第2张  transaction.begin(); 
//开始JTA事务
java事务管理 (转)第2张
  db.executeUpdate("delete from helloworld where ID=" + ID);
java事务管理 (转)第2张  db.executeUpdate(
"delete from helloworld _book where ID=" + ID);
java事务管理 (转)第2张  db.executeUpdate(
"delete from helloworld _user where ID=" + ID);
java事务管理 (转)第2张  transaction.commit(); 
//提交JTA事务
java事务管理 (转)第2张
  db.close();
java事务管理 (转)第2张  
return”success”;
java事务管理 (转)第14张 }

java事务管理 (转)第5张 
catch (Exception e) {
java事务管理 (转)第5张  
try {
java事务管理 (转)第2张   transaction.rollback();
//事务回滚
java事务管理 (转)第14张
  }

java事务管理 (转)第5张  
catch (Exception e) {
java事务管理 (转)第2张   e.printStackTrace();
java事务管理 (转)第14张  }

java事务管理 (转)第2张  exc.printStackTrace();
java事务管理 (转)第2张  db.close();
java事务管理 (转)第2张  
return “fail”;
java事务管理 (转)第14张 }

java事务管理 (转)第21张}
 
java事务管理 (转)第22张
3.容器事务管理
在Spring、Hibernate等框架中都有各自的事务管理功能。虽然表现形式有些差别,但都是在JAVA事务管理的基础上实现的。这里不进行介绍。

免责声明:文章转载自《java事务管理 (转)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GitHub使用手册4——查看多人协作项目Jenkins教程(六)脚本与方法执行效果不合预期,如何及时中止pipeline下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第10章 数据库恢复技术 | 数据库知识点整理

第10章 数据库恢复技术 了解 数据库的一致性状态 数据库运行中可能产生的故障类型,它们如何影响事务的正常执行,如何破坏数据库数据 数据转储的概念及分类 数据库的镜像功能 掌握 事务的基本概念和事务的ACID性质 数据库恢复的实现技术 日志文件的内容及作用 登记日志文件所要遵循的原则 具有检查点的恢复技术 恢复的基本原理 针对不同故障的恢复策略和方法...

【总结】数据库优化的若干方法

导图 下图是我结合自己的经验以及搜集整理的数据库优化相关内容的思维导图,如果图片不清楚,可以在浏览器中右键,在新窗口中查看(Chrome)或者查看图像(FireFox)。 常用关键字优化 在编写T-SQL的时候,会使用很多功能类似的关键字,比如COUNT和EXISTS、IN和BETWEEN AND等,我们往往会根据需求直奔主题地来编写查询脚本,完成需求要...

JDBC详解2

day18总结 今日思维导图: 今日内容 事务 连接池 ThreadLocal BaseServlet自定义Servlet父类(只要求会用,不要求会写) DBUtils à commons-dbutils 事务 事务的四大特性:ACID; mysql中操作事务 jdbc中操作事务 事务概述 为了方便演示事务,我们需要创建一个...

MySQL8.0官方文档学习

InnoDB架构 下面的架构里只挑选了部分内容进行学习 内存架构(In-Memory Structures) Buffer Pool Buffer Pool是内存中的一块区域,InnoDB访问表和索引的时候缓存这些数据。buffer pool使得经常使用的数据直接从内存读取,加快了数据处理。在专用的服务器上,会给buffer pool分配80%的物理内存...

c#事务的使用、示例及注意事项 转

一、事务的介绍.NET Framework 开发员指南事务是一组组合成逻辑工作单元的操作,虽然系统中可能会出错,但事务将控制和维护事务中每个操作的一致性和完整性。例如,在将资金从一个帐户转移到另一个帐户的银行应用中,一个帐户将一定的金额贷记到一个数据库表中,同时另一个帐户将相同的金额借记到另一个数据库表中。由于计算机可能会因停电、网络中断等而出现故障,因此...

MySQL 详细解读undo log :insert undo,update undo

转自aobao.org/monthly/2015/04/01/ 本文是对整个Undo生命周期过程的阐述,代码分析基于当前最新的MySQL5.7版本。本文也可以作为了解整个Undo模块的代码导读。由于涉及到的模块众多,因此部分细节并未深入。 前言 Undo log是InnoDB MVCC事务特性的重要组成部分。当我们对记录做了变更操作时就会产生undo记录...