JDBC 事务级别

问题描述

请问在事务级别上怎么设置比较好!都是在什么操作中设置,哪一个级别好一点!需不需要在update,delete select 方法上加上synchronized呢?问题补充:要是对数据完整性要求比较高,比如政府系统,在线人数多,操作频繁,应该如何去设置事务的级别?感觉加上synchronized会影响效率,不加有怕会出现不正确数据。如何避免呢?要是把级别设置最高!会不会好一点。还是怎么做比较好一点!

解决方案

对于同时运行的多个事务,当这些事务访问数据库中相同的数据时,如果没有采取必要的隔离机制,就会导致各种并发问题,这些并发问题可归纳为以下几类: A.第一类丢失更新:撤销一个事务时,把其他事务已提交的更新数据覆盖。 B.脏读:一个事务读到另一个事务为提交的更新数据。 C.虚读:一个事务读到另一个事务已提交的新插入的数据。 D.不可重复读:一个事务读到另一个事务已提交的更新数据。 E.第二类丢失更新:这是不可重复读中的特例,一个事务覆盖另一个事务已提交的更新数据。 数据库系统提供了四种事务隔离级别供用户选择: A.Serializable(串行化):一个事务在执行过程中完全看不到其他事务对数据库所做的更新。 B.Repeatable Read(可重复读):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,但是不能看到其他其他事务对已有记录的更新。 C.Read Commited(读已提交数据):一个事务在执行过程中可以看到其他事务已经提交的新插入的记录,而且能看到其他事务已经提交的对已有记录的更新。 D.Read Uncommitted(读未提交数据):一个事务在执行过程中可以拷打其他事务没有提交的新插入的记录,而且能看到其他事务没有提交的对已有记录的更新。 隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。对于多数应用程序,可以有优先考虑把数据库系统的隔离级别设为Read Commited,它能够避免脏读,而且具有较好的并发性能。尽管它会导致不可重复读、虚读和第二类丢失更新这些并发问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或乐观锁来控制。 当数据库系统采用read Commited隔离级别时,会导致不可重复读喝第二类丢失更新的并发问题,可以在应用程序中采用悲观锁或乐观锁来避免这类问题。从应用程序的角度,锁可以分为以下几类: A.悲观锁:指在应用程序中显示的为数据资源加锁。尽管能防止丢失更新和不可重复读这类并发问题,但是它会影响并发性能,因此应该谨慎地使用。 B.乐观锁:乐观锁假定当前事务操作数据资源时,不回有其他事务同时访问该数据资源,因此完全依靠数据库的隔离级别来自动管理锁的工作。应用程序采用版本控制手段来避免可能出现的并发问题。 这样说可以吗?你可以根据你的实际的系统运行情况选定事务级别啊
解决方案二:
事务级别一般默认就可以啊,处除非你有什么特殊需要update,delete select 方法上加上synchronized这个要看你做什么东西了一般对多个表大量数据的长时间操作加上synchronized比如说在系统里对数据库的导入和导出

时间: 2024-09-19 00:47:02

JDBC 事务级别的相关文章

JDBC事务级别,请大家多了解了解

JDBC事务级别 为了解决与"多个线程请求相同数据"相关的问题,事务之间用锁相互隔开.多数主流的数据库支持不同类型的锁:因此,JDBC API 支持不同类型的事务,它们由 Connection 对象指派或确定.在 JDBC API 中可以获得下列事务级别: TRANSACTION_NONE 说明不支持事务. TRANSACTION_READ_UNCOMMITTED 说明在提交前一个事务可以看到另一个事务的变化.这样脏读.不可重复的读和虚读都是允许的. TRANSACTION_READ_

JDBC事务编程模型备忘

在Spring一统天下的情况下,JDBC快没有生存余地了.不过JDBC还是Java操作数据库的基础,现在Java项目中JDBC的应用快绝迹了,有必要对JDBC的事务编程模型做个象征性的总结. 下面是示例,保证代码可以编译,但不保证能运行,呵呵. import java.sql.*; /** * JDBC编程事务控制模型备忘 * * @author : leizhimin,2008-8-21 14:48:42.<p> */ public class JdbcTxText { public sta

深入解析Java中的JDBC事务_java

事务事务是一步或多步组成操作序列组成的逻辑执行单元,这个序列要么全部执行,要么则全部放弃执行.事务的四个特性:原子性(Atomicity).一致性(Consistency).隔离性(IsoIation)和持续性(Durability)原子性(Atomicity):事务应用最小的执行单元,不可再分.是事务中不可再分的最小逻辑执行体. 一致性(Consistency):事务的执行结果,必须使数据库的从一个一致性的状态变到另一个一致性的状态. 隔离线(IsoIation):各个事务的执行互不干扰,任意

java 连接异常-java 启动jdbc 事务报错 嵌套异常

问题描述 java 启动jdbc 事务报错 嵌套异常 org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC

浅谈如何结合JDBC事务与Spring+Hibernate

问题:客户在其数据库操作过程中需要调用我们的工作流接口,这样就需要将我们的工作流操作与他 们的业 务操作置于同一个事务中.我们的服务采用的都是spring的声明式事务,而客户采用的是对 connection进行事务处理. 如何保证JDBC事务的一致性? 想到的解决方案一:使用jta事务,用tomcat+jotm提供事务管理器.为什么一开始就想到要使用jta事 务??实际上我们和客户都是使用的同一个数据库,为了方便,各自使用了不同的数据库连接方式,使用 jta的话确实有bt的意思在里面.但是事实上

CSDN上看到的一篇有关Spring JDBC事务管理的文章(内容比较全) (转)

  JDBC事务管理 Spring提供编程式的事务管理(Programmatic transaction manage- ment)与声明式的事务管理(Declarative transaction management),为不同的事务实现提供了一致的编程模型,这节以JDBC事务为例,介绍Spring的事务管理.  5.3.1  Spring对事务的支持 事务是一组原子(Atomic)操作的工作单元,以数据库存取的实例来说,就是一组SQL指令,这一组SQL指令必须全部执行成功,若因为某个原因未全

JDBC事务管理及SavePoint示例

默认情况下,当我们创建一个数据库连接时,会运行在自动提交模式(Auto-commit)下.这意味着,任何时候我们执行一条SQL完成之后,事务都会自动提交.所以我们执行的每一条SQL都是一个事务,并且如果正在运行DML或者DDL语句,这些改变会在每一条SQL语句结束的时存入数据库.有时候我们想让一组SQL语句成为事务的一部分,那样我们就可以在所有语句运行成功的时候提交,并且如果出现任何异常,这些语句作为事务的一部分,我们可以选择将其全部回滚. 让我们通过一个简单的示例理解一下,这里使用JDBC的事

[翻译]:SQL死锁-锁与事务级别

原文:[翻译]:SQL死锁-锁与事务级别 其实这一篇呢与解决我项目中遇到的问题也是必不可少的.上一篇讲到了各种锁之间的兼容性,里面有一项就是共享锁会引起死锁,如何避免呢,将我们的查询都设置中read uncommitted是否可行呢?其结果显示,当我们当所有的查询都设置成read uncommitted后,后面共享锁死锁基本消除了,看来还是管用的.好了下面接着翻译: Last time we discussed a few major lock types that SQL Server use

Java中JDBC事务与JTA分布式事务总结与区别_java

Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务.常见的容器事务如Spring事务,容器事务主要是J2EE应用服务器提供的,容器事务大多是基于JTA完成,这是一个基于JNDI的,相当复杂的API实现.所以本文暂不讨论容器事务.本文主要介绍J2EE开发中两个比较基本的事务:JDBC事务和JTA事务. JDBC事务 JDBC的一切行为包括事务是基于一个Connection的,在JDBC中是通过Connection对象进行事务管理.在JDBC中,