隔离级别
两个事务并发的读取一个东西。。。
隔离级别
读未提交(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);
}
}
分享到:
相关推荐
- **事务支持**:提供了ACID(原子性、一致性、隔离性和持久性)级别的事务管理。 - **并发性**:支持多线程和并发连接,适用于高并发的应用场景。 - **诊断和监控**:提供详细的日志和性能统计,便于故障排查和系统...
"jdbc-drivers离线驱动"这个主题主要关注的是如何在没有网络的情况下安装和使用JDBC驱动,这对于那些网络环境不稳定或者需要在隔离环境中操作数据库的开发者来说尤为重要。 JDBC是Java平台的标准接口,它允许Java...
4. **defaultTransactionIsolation**:定义连接的默认事务隔离级别,可选值包括 `NONE`, `READ_COMMITTED`, `READ_UNCOMMITTED`, `REPEATABLE_READ`, 和 `SERIALIZABLE`,分别对应不同的事务隔离级别。 5. **...
### JDBC专题(六)-JDBC专题-事务的隔离级别 #### 一、事务的基本概念与特性 事务在数据库管理中扮演着极其重要的角色,尤其是在处理关键业务逻辑时,确保数据的一致性和完整性至关重要。根据提供的文件信息,我们...
`@Transactional`注解用于标记需要进行事务管理的方法,其包含多个属性,如`propagation`定义事务传播行为,`isolation`定义事务隔离级别,`rollbackFor`指定触发回滚的异常类型等。 `jdbcTemplate`的使用通常涉及...
3. 事务隔离级别和事务超时:Spring支持设置不同的事务隔离级别,如READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE,以及设置事务的超时时间。 4. 事务传播行为:定义了如REQUIRED、SUPPORTS、...
- 设置合适的连接超时和事务隔离级别,以优化并发性能。 总结来说,`JDBC-mysql`主题涵盖了如何配置和使用MySQL JDBC驱动来连接和操作MySQL数据库,这在开发基于Java的数据库应用中是至关重要的。正确配置和使用...
合理配置事务超时、连接池大小等参数,以及选择合适的事务隔离级别,可以有效地平衡事务安全和系统性能。 7. **总结** Atomikos Transactions JDBC是Java开发者处理分布式事务的重要工具,它简化了开发过程,提高...
本课程将详细解释这些概念,并通过实例演示如何在Java中实现和管理事务,以及如何利用JDBC设置不同的隔离级别。通过学习这部分内容,开发者将能够更好地理解和处理数据库并发问题,提高应用程序的稳定性和可靠性。
同时,应使用PreparedStatement来防止SQL注入攻击,并根据实际情况选择合适的事务隔离级别,保证数据一致性。 总之,JdbcDrivers jar包是Java数据库开发中的核心组件,它提供了与多种数据库系统的连接能力,是Java...
- **未提交读(Read Uncommitted)**:最低的隔离级别,允许读取未提交的数据,可能导致脏读、不可重复读和幻读。 - **提交读(Read Committed)**:在提交后才允许读取数据,防止脏读,但可能出现不可重复读和幻...
- 设置合适的事务隔离级别和批处理操作可以优化数据库操作的性能。 **总结** JDBC驱动是Java应用程序与数据库间的关键接口,Oracle Driver和MySQL Driver分别是针对Oracle和MySQL数据库的JDBC实现。理解和熟练使用...
JDBC 支持四种不同的事务隔离级别,每种级别的隔离效果不同,可以根据具体的应用需求选择合适的级别: 1. **TRANSACTION_NONE**:不支持事务隔离。 2. **TRANSACTION_READ_UNCOMMITTED**:允许读取未提交的数据。 3...
- **事务支持**:支持JDBC的事务隔离级别,如READ UNCOMMITTED、READ COMMITTED等。 - **安全**:提供集成的身份验证和加密功能,确保数据传输的安全。 6. **注意事项** - 驱动版本与JRE版本的匹配至关重要,...
此外,为了保证最佳性能,可能还需要对数据库进行适当的优化,比如创建合适的索引、调整事务隔离级别等。 总结来说,Tomcat JDBC 会话管理器是一个强大的工具,它为Java Web应用提供了可靠的会话持久化解决方案,...
Spring支持四种标准的事务隔离级别:READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ和SERIALIZABLE,每种都有其适用场景,开发者应根据具体需求选择。 另外,事务的传播行为也是Spring事务管理的一部分。例如...
5. TransactionDefinition和PlatformTransactionManager:定义了事务的属性,如隔离级别、超时时间等,而PlatformTransactionManager则是事务管理的接口,DataSourceTransactionManager实现了这个接口。 6. ...
通过在Service层的方法上添加@Transactional注解,可以开启或关闭事务,以及设置事务的隔离级别、回滚规则等属性。 接下来,我们要讨论的是AOP(Aspect-Oriented Programming)。AOP是一种编程范式,它将关注点分离...
JDBC提供了Connection对象的setAutoCommit()方法来开启或关闭自动提交,而Spring则提供了@Transactional注解进行声明式事务管理,可以在方法级别上指定事务属性,如隔离级别。 例如,在Spring中,我们可以这样设置...
JDBC支持四大事务隔离级别:读未提交(READ UNCOMMITTED)、读已提交(READ COMMITTED)、可重复读(REPEATABLE READ)和串行化(SERIALIZABLE)。通过`Connection.setTransactionIsolation()`设置。 ### 6. 错误...