`

jdbc---隔离级别

 
阅读更多
原文地址“http://z466459262.iteye.com/blog/769657

Java代码  收藏代码
隔离级别 
 
两个事务并发的读取一个东西。。。 
 
隔离级别 
 
读未提交(read uncommitted) :(可以读未提交的) 
 
问题是: 
-----脏读(如果他没提交就回滚了,那么你读出来的就是错误的信息) 
-----不可重复读(重复读时值不同)(我第一次读的是100。而第二次读的却是200,重复读取出来的数据不一致就叫不可重复读) 
-----幻读(重复读时条数不同)(比如我第一次查出来是5条数据,而这时有另一个线程插入了一条记录,如果我再去查的话,那么又多了,我们将这条记录 
称为幻影数据,) 
 
 
读已提交(read committed):因为只对读进行了控制,而没有对别人插入进行限制 
问题是: 
不可重复读(别人修改数据导致值不同) 
幻读(别人插入数据导致条数增加)----oracle的默认隔离级别,也就是说oracle只在别人先对数据修改的时候上锁,如果有人先读了,然后又有人修改了,那么他不上锁 
 
可重复读: 不但对读进行了控制,而且可以锁定我读的这条记录,那么当然别人改不了我读 
的这条记录 ---mysql的隔离级别 
 
问题是: 
  幻读----只对一条数据起作用,他没锁定整个表,当然我还可以插入 
 
 
串行化:锁定整个表,课串行化的意思就是不可并行化,那么对并发效率是有极大影响的 
 
java中设置隔离级别: 
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMIT); 
 
 
String querysql = "select account from accounts where cardnum=? for update"; //注意这里加入了数据库的锁 
String updatesql = "update accounts set account = ? where cardnum = ?"; 
boolean flag = false; 
try{ 
  conn = JdbcUtils.getConnection(); 
  conn.setAutoCommit(false);  //并且设置了手动提交,如果不设置的话,将会自动提交 
  pstmt = conn.prepareStatement(querysql); 
  rs = pstmt.executeQuery(); 
  double oldMoney= -1 , newMoney = -1; 
  if(rs.next()){ 
      oldMoney = rs.getDouble("account"); 
      newMoney = Arith.sub(oldMoney,money); 
      if(newMoney>0){ 
         pstmt = conn.prepareStatement(updatesql); 
         pstmt.setDouble(1,newMoney); 
         pstmt.setString(2,cardNum); 
         int i = pstmt.executeUpdate(); 
         if(i>0)flag = true; 
      } 
      conn.commit(); 
  }catch(Exception e){ 
     throw e; 
  }finally{ 
      jdbcUtils.close(conn,rs,pstmt); 
  } 
分享到:
评论

相关推荐

    JDBC专题(六)-JDBC专题-事务的隔离级别.docx

    •隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。 A ------> B B ------> C •持久性(Durability...

    JDBC事务 JTA事务 传播特性 隔离级别

    有关JDBC事务 JTA事务 传播特性 隔离级别等等

    jdbc的详细介绍

    6. 事务的隔离级别 第五章 JDBC2.0 1. ResultSet的可滚动性(默认只能向下(向前)移动) 2. ResultSet的可更新性(默认是不可以更新) 3. 批处理 4. 高级数据类型 第六章 2.0扩展内容 1. 连接池 2. 数据源(工厂模式...

    尚硅谷_佟刚_JDBC.pptx

    11. 处理事务 & 事务的隔离级别(视频16-17) 12. 批量处理(视频18) 13. 数据库连接池 & C3P0 & DBCP(视频19-20) 14. 使用 DBUtils(视频21-23) 15. 使用 JDBC 调用函数 & 存储过程(视频24) 16. 课件及源码 ----------...

    Java数据库接口JDBC介绍

    2.1.6 事务隔离级别 5 2.2 DriverManager类 6 2.2.1 跟踪可用驱动程序 6 2.2.2 建立连接 7 2.3 Statement对象 7 2.3.1 创建Statement对象 8 2.3.2 使用Statement对象执行语句 8 2.3.3 语句完成 8 2.3.4 语句完成...

    19-事务-源代码.rar

    五、事务的特性和隔离级别(概念性问题---面试)。 1.什么是事务 2.mysql的事务 1.QueryRunner 1.事务的特性ACID 2.并发访问问题----由隔离性引起 3.事务的隔离级别 默认是自动事务: 执行sql语句:...

    JDBC Java Database Connectivity

    基本目标:  了解JDBC (Java Database Connectivity)相关概念  JDBC的四种类型的驱动  JDBC核心接口与类  JDBC体系结构图和开发步骤 JDBC 事务 进阶目标: ... 事务的隔离级别 批处理(Batch)

    Java_JDBC由浅入深

    8.6 数据库的隔离级别介绍 56 8.6.1 未提交读 57 8.6.2 提交读 58 8.6.3 重复读 59 8.6.4 序列化读 60 8.7 小结 62 第九节 PreparedStatement接口的使用 62 第十节 CallableStatement接口的使用 62 9.1 无参无返回值...

    JDBC总结——事务

    文章目录事务一、事务的基本介绍1、概念2、操作3、操作实例4、MySQL数据库中默认自动提交二、事务的四大特征三、事务的隔离级别1、概念2、存在的问题3、隔离级别四、Jdbc事务控制1、概述2、控制事务的API:3、核心...

    JDBC核心技术精讲

    本课程《JDBC核心技术精讲》为JavaWeb必学课程。课程内容丰富全面,全程手写代码,可以带你一步一步学会JDBC!课程内容涵盖如下:1、JDBC概述及核心类介绍 2、JDBC入门案例 3、Statement对象介绍和使用4、JDBC使用...

    JDBC:用于测试和实践Java JDBC API的多个程序

    IsolationTest.java IsolationTest是用于测试MySQL可以实现的各种隔离级别的程序。 测试隔离级别READ COMMITTED和SERIALIZABLE。 通过设置隔离级别,然后执行一系列交织操作,然后将操作结果打印在数据库上来执行...

    2017最新大数据架构师精英课程

    45_隔离级别-并发现象展示-避免 46_表级锁-行级锁-forupdate 47_mysql数据源连接池 48_NIO" d% v1 P# ~3 S/ L 49_NIO程序- u5 T2 a5 N" {! @8 q4 c 50_Vmware安装-client centos7机安装2 Q. l/ r7 y) ^% n8 |4 _. k ...

    Spring声明式事务配置管理方法

    可以在spring中对整个项目的事务进行控制

    apache-kyuubi-1.4.1-incubating-source.tgz

    Apache Kyuubi是一个分布式和多租户网关,为数据湖查询引擎(例如Spark、Flink或Trino等)提供SQL等查询服务。...Kyuubi及其引擎都是存储独立的,支持众多的数据源,并且Kyuubi支持在连接级别隔离后台引擎实例

    apache-kyuubi-1.4.1-incubating-bin.tgz

    Apache Kyuubi是一个分布式和多租户网关,为数据湖查询引擎(例如Spark、Flink或Trino等)提供SQL等查询服务。...Kyuubi及其引擎都是存储独立的,支持众多的数据源,并且Kyuubi支持在连接级别隔离后台引擎实例

    apache-kyuubi-1.5.2-incubating-source.tgz

    Apache Kyuubi是一个分布式和多租户网关,为数据湖查询引擎(例如Spark、Flink或Trino等)提供SQL等查询服务。...Kyuubi及其引擎都是存储独立的,支持众多的数据源,并且Kyuubi支持在连接级别隔离后台引擎实例

    apache-kyuubi-1.5.2-incubating-bin.tgz

    Apache Kyuubi是一个分布式和多租户网关,为数据湖查询引擎(例如Spark、Flink或Trino等)提供SQL等查询服务。...Kyuubi及其引擎都是存储独立的,支持众多的数据源,并且Kyuubi支持在连接级别隔离后台引擎实例

    apache-kyuubi-1.6.1-incubating-source.tgz

    Apache Kyuubi是一个分布式和多租户网关,为数据湖查询引擎(例如Spark、Flink或Trino等)提供SQL等查询服务。...Kyuubi及其引擎都是存储独立的,支持众多的数据源,并且Kyuubi支持在连接级别隔离后台引擎实例

    apache-kyuubi-1.6.1-incubating-bin.tgz

    Apache Kyuubi是一个分布式和多租户网关,为数据湖查询引擎(例如Spark、Flink或Trino等)提供SQL等查询服务。...Kyuubi及其引擎都是存储独立的,支持众多的数据源,并且Kyuubi支持在连接级别隔离后台引擎实例

    事务讲解-LingRan.pptx

    主要内容涉及java事务的基础,事务的四大特性,数据库中的事务,并发访问出现的问题和隔离级别设置,JDBC中的实现以及事务相关面试问题的整理汇总。

Global site tag (gtag.js) - Google Analytics