JDBC下篇-事务隔离级别及数据库连接池等

2 篇文章 0 订阅

1. 事务

1.1 定义

  1. 数据库事务:一组逻辑操作单元,使数据从一种状态变换到另一种状态。
  2. 一组逻辑操作单元:一个或多个DML操作。
  3. 数据一旦提交,就不可回滚。

1.2 导致数据自动提交的操作

  1. DDL操作一旦执行,都会自动提交。
  2. DML默认情况下,一旦执行,就会自动提交,我们可以通过set autocommit = false的方式取消DML操作的自动提交。
  3. 默认在关闭连接时,会自动提交数据。

1.3 事务处理的原则

保证事务都作为一个工作单元来执行,即使出现了故障,都不能改变这种执行方式。

  1. 当在一个事务中执行多个操作时,要么所有的事务都被提交(commit),那么这些修改就永久地保存下来。
  2. 要么数据库管理系统将放弃所作的修改,保证整个事务回滚(rollback)到最初状态

2. 数据库的并发问题

  1. 脏读:对于两个事务T1,T2,T1读取了已经被T2更新但还没有被提交的字段。之后,若T2回滚,T1读取的内容就是临时且无效的。
  2. 不可重复读:对于两个事务T1,T2,T1读取了一个字段然后T2更新了该字段。之后,T1再次读取同一个字段,值就不同了。
  3. 幻读:对于两个事务T1,T2,T1从一个表中读取了一个字段然后T2在该表中插入了一些新的行。之后,如果T1再次读取同一个表,就会多出几行。

3. 四种隔离级别

3.1 读未提交

READ UNCOMMITED
一个事务可以读取另一个未提交事务的数据。

示例:小明买衣服付款,钱已打给商店老板账户,但事务没有提交。老板查看自己的账户,发现钱已到账,于是让小明正常离开。小明离开后回滚了该事务。

结果:小明未付钱买到了衣服,商店老板实际未收到小明的付款。

分析:商店老板查看自己的资金账户,这个时候看到的是小明还没有提交事务的付款,这就是脏读。

3.2 读已经提交

READ COMMITED
仅仅解决脏读问题。

示例:小明卡里有1000元,准备与几个朋友聚餐消费,消费1000元,当他买单时(事务开启),收费系统检测到他卡里有1000元。就在检测完毕的时候,小明女朋友发现小明有私房钱,全部转走并提交。当收费系统准备扣款时,再检查小明卡里的金额,发现已经没钱了,付款不成功。小明此时就会很纳闷,明明有钱的呀,钱呢?

分析:该示例中同一个事务范围内两个相同的查询却返回了不同数据,这就是不可重复读。该隔离级别可以解决脏读问题。

3.3 可重复读

REPEATABLE READ
解决了脏读和不可重复读。

在开始读取数据(事务开启)时,不再允许修改操作。

3.4 序列化

SERIALIZABLE
上面三个问题都解决了。

数据库事务的最高隔离级别。在此级别下,事务串行执行。可以避免脏读、不可重复读、幻读等读现象。但是效率低下,耗费数据库性能,不推荐使用。
在这里插入图片描述
一致性和并发性:一致性越好,并发性越差。

4. Dao及其相关实现类

DAO:Data Access Object访问数据信息的类和接口,包括了对数据的CRUD(Create, Retrival, Update, Delete),而不包含任何业务相关的信息。有时也称作:BaseDAO

作用:为了实现功能的模块化,更有利于代码的维护和升级。

5. 数据库连接池

5.1 回顾

Java的内存泄露:一直没有被销毁,内存中有对象,不能被回收。
在这里插入图片描述

5.2 数据库连接技术的优点

  1. 资源重用(可以重复使用已经提供好的连接)
  2. 更快的系统反应速度(响应速度,减少了创建连接相应的时间)
  3. 新的资源分配手段
  4. 统一的连接管理,避免数据库连接泄露

5.3 常见的开源数据库连接池

  1. DBCP: 速度较,但是存在BUG,是tomcat服务器自带dbcp数据库连接池。
  2. C3P0:速度相对较,稳定性还可以。
  3. Druid:阿里提供的数据库连接池。

参考资料:JDBC核心技术

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值