事务隔离级别是由数据库系统实现的。

Java事务

1) 说到事务,不得不提的就是ACID特性,再次回顾:

Ø 原子性(atomicity):组成事务处理的语句形成了一个逻辑单元,不能只执行其中的一部分。

Ø 一致性(consistency):在事务处理执行前后,数据库是一致的(数据库数据完整性约束)。

Ø 隔离性(isolcation):一个事务处理对另一个事务处理的影响。

Ø 持续性(durability):事务处理的效果能够被永久保存下来 。

2) 然后就是事务在Java中的最基本操作:

Ø connection.setAutoCommit(false);//打开事务。

Ø connection.commit();//提交事务。

Ø connection.rollback();//回滚事务。

这里需要提的就是,当只想撤销事务中的部分操作时可使用SavePoint:

Ø SavePoint sp = connection.setSavepoint();

Ø connection.rollerbak(sp);connection.commit();

3) 下面用一个实例代码来展示一下:

1. package cn.itcast.jdbc;

3. import java.sql.Connection;

4. import java.sql.ResultSet;

5. import java.sql.SQLException;

6. import java.sql.Savepoint;

7. import java.sql.Statement;

8. /**

9. * 事务测试

10. */

11. public class SavePointTest {

13. public static void main(String[] args) throws SQLException {

14. testTransaction();

15. }

17. static void testTransaction() throws SQLException {

18. Connection conn = null;

19. Statement st = null;

20. ResultSet rs = null;

21. Savepoint sp = null;

22. try {

23. //获取Connection(JdbcUtils为自定义的包装类,这里不做解释)

24. conn = JdbcUtils.getConnection();

25. //开启事务

26. conn.setAutoCommit(false);

27. st = conn.createStatement();

28. //id为1的人的Money减10

29. String sql = "update user set money=money-10 where id=1";

30. st.executeUpdate(sql);

31. //********************回滚界限***************************

32. //设置回滚点(savepoint)

33. sp = conn.setSavepoint();

34. //********************回滚界限***************************

35. //id为2的人的Money减10

36. sql = "update user set money=money-10 where id=3";

37. st.executeUpdate(sql);

38. sql = "select money from user where id=2";

39. rs = st.executeQuery(sql);

40. float money = 0.0f;

41. if (rs.next()) {

42. money = rs.getFloat("money");

43. }

44. if (money > 300){

45. throw new RuntimeException("已经超过最大值!");

46. }

47. //id为2的人的Money加10

48. sql = "update user set money=money+10 where id=2";

49. st.executeUpdate(sql);

50. //提交事务

51. conn.commit();

52. } catch (RuntimeException e) {

53. if (conn != null && sp != null) {

54. //回滚事务,注意里面的参数sp即为我们上面设置的savePoint,如果回滚的话只能回滚到savePoint以下的部分

55. //上面的部分不会得到回滚

56. conn.rollback(sp);

57. conn.commit();

58. }

59. throw e;

60. } catch (SQLException e) {

61. if (conn != null)

62. conn.rollback();

63. throw e;

64. } finally {

65. //释放资源(JdbcUtils为自定义类)

66. JdbcUtils.free(rs, st, conn);

67. }

68. }

69. }

上面所有的操作(CRUD)都是在同一个数据源上的操作,无法处理跨多数据源(分布式)操作。跨多个数据源的事务就要使用JTA容器实现事务。根本思想就是“分成两阶段提交”,具体内容这里不做介绍。

1.javax.transaction.UserTransaction tx = (UserTransaction)ctx.lookup(“jndiName");

2. tx.begin();

3. //connection1 connection2 (可能来自不同的数据库)…

4. tx.commit();//tx.rollback();

隔离级别

为了应对多线程并发读取数据时出现的问题,事务有了“隔离级别”特性,多线程并发读取数据一般会引发如下三个问题:

Ø 脏读(dirtyreads)

Ø 不可重复读(non-repeatablereads)

Ø 幻读(phantomread)

下面进行简要介绍:

Ø 脏读:一个事务读取了另一个未提交的并行事务写的数据。

Ø 不可重复读:一个事务重新读取前面读取过的数据, 发现该数据已经被另一个已提交的事务修改过。

Ø 幻读:一个事务重新执行一个查询,返回一套符合查询条件的行, 发现这些行因为其他最近提交的事务而发生了改变。

2) 为了处理上面的读数据问题,java事务提供了4种隔离级别,如下:

Ø 读未提交(Read uncommitted)

Ø 读已提交(Readcommitted)

Ø 可重复读(Repeatableread)

Ø 可串行化(Serializable)

3) 4种隔离级别与上面3个问题的对应关系如下:

image

注意上面的“可能”二字。

4) 隔离级别的设定:

connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

在代码中的应用:

image

转载文章https://blog.csdn.net/dragon901/article/details/79849492

java 事务级别_java事务隔离级别相关推荐

  1. spring 事务隔离级别和传播行为_Java工程师面试1000题146-Spring数据库事务传播属性和隔离级别...

    146.简介一下Spring支持的数据库事务传播属性和隔离级别 介绍Spring所支持的事务和传播属性之前,我们先了解一下SpringBean的作用域,与此题无关,仅做一下简单记录. 在Spring中 ...

  2. mysql隔离级别 简书_数据库事务和四种隔离级别

    什么是事务 事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),它通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起 ...

  3. 事务的四种隔离级别(一)Read uncommitted

    背景知识 在数据库操作中,为了有效保证并发读取数据的正确性,提出的事务隔离级别. 之所以提出事务隔离级别,是因为同一个应用程序中的多个事务或不同应用程序中的多个事务在同一个数据集上并发执行时, 可能会 ...

  4. Spring事务传播性与隔离级别

    为什么80%的码农都做不了架构师?>>>    事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题. 事务最重要的两个特性,是事务的传 ...

  5. Spring事务管理-传播行为-隔离级别

    事务是逻辑上的一组操作,这组操作要么全部成功,要么全部失败. 事务的特性:ACID 原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生 一致性:事务前后数据的完整性约束保持一致 ...

  6. mysql事务传播属性_Spring事务传播属性和隔离级别详细介绍

    1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 Support a current transaction, create a new one if none ...

  7. Spring事务传播属性和隔离级别

    Spring事务传播属性和隔离级别 一.Spring事务传播属性(Propagation): 1) REQUIRED(默认属性) 如果存在一个事务,则支持当前事务.如果没有事务则开启一个新的事务.  ...

  8. oracle事务重要属性,Oracle中的事务(2)--属性和隔离级别

    事务的属性 1.只读属性(read only) 只读事务,只执行查询操作,而不允许执行DML(增.删.改)操作,使用只读事务,可以让用户只取到某个时间点的数据. 假如有一个机票代售点,有一个管理员想在 ...

  9. 数据库事务的四个隔离级别

    [3]事务的四个隔离级别.   事务隔离级别                     脏读       不可重复读        幻读         READ_UNCOMMITTED       允 ...

  10. 事务四大特性及隔离级别

    事务四大特性及隔离级别 咱们都知道事务有四大特性ACID,也就原子性(atomicity|ætəˈmɪsəti|). 一致性(consistency).隔离性(isolation|aɪsəˈleɪʃn ...

最新文章

  1. 渗透各行各业,这家RPA外企宣布全面进军中国市场
  2. 2D和3D机器视觉检测技术的优势和局限性
  3. 【AI不惑境】模型量化技术原理及其发展现状和展望
  4. android封装好的Color类中的常量
  5. 计算机语言恢复,win10系统找回消失不见语言栏的恢复方法
  6. [转载] Python学习:Python成员运算符和身份运算符
  7. java基础学习笔记(三)
  8. Wireshark数据包分析之数据包信息解读
  9. KVM虚拟机PCI设备直通
  10. 学习——AQS工作原理分析
  11. Betwin实现电脑一分为二
  12. html5 牧场游戏,手机QQ首批五款HTML5游戏名单 农场偷菜复活
  13. windows server 2012 AD 活动目录部署系列(二)创建域控制器
  14. 有源淹没分析arcgis_基于DEM的有源洪水淹没分析算法
  15. matlab 自激振荡,自激振荡系统matlab仿真课程设计
  16. 用加密算法给女朋友写封情书
  17. 用户之声 | 从江苏新大陆项目看GBase国产数据库
  18. 华硕服务器主板型号命名规则,装机指南 华硕主板新命名规则解读
  19. 大学计算机基础钮和荣,钮和荣
  20. figma和sketch应该选择哪个?

热门文章

  1. VMware Fusion for Apple silicon
  2. 历史上有哪些最凶计算机病毒?
  3. Unity3D关于iTween知识详解和接口总结
  4. texlive2021
  5. 地图下载器拼接ArcGIS Server瓦片
  6. 全息过山车:带你释放压力,体验激情
  7. Xposed框架的安装包和卸载包的默认下载路径以及网站下载地址
  8. metasfresh 集成 yetiforce crm
  9. TWS真无线蓝牙耳机自动化测试设备助力TWS自动化批量生产
  10. matlab实现kmeans聚类算法