事务、数据库连接池、DBUtiles笔记

1、事务介绍

  • 事务,其实指的就是一组操作,里面包含许多个单一的逻辑。只要一个逻辑没有执行成功,那么都算失败。所有的数据都回归到最初的状态(回滚)。
  • 为什么要有事务? 为了确保逻辑的成功。例如:银行的转账
  • 使用命令行方式演示事务:

    commit,提交事务,数据将会写到磁盘上的数据库。rollback,数据回滚,回到最初状态。
  • 使用代码方式演示事务:
    在这里插入图片描述
    注:事务只针对当前的连接对象,如果再开一个连接对象,那么还是默认的提交。

2、事务的特性(ACID)

面试可能会问

  • 原子性(Atomicity),指的是事务中包含的逻辑,不可分割
  • 一致性(Consistency),事务执行前后,数据完整性
  • 隔离性(Isolation),事务在执行期间,不应该受到其他事务的影响
  • 持久性(Persistence),指的是事务执行成功,那么数据应该持久保存到磁盘上

3、事务的安全隐患


不考虑隔离级别设置,可能会出现以下问题:

  • 读:脏读、不可重复读、幻读。脏读,是一个事务读到另一个事务还未提交的数据。不可重复读,一个事务读到了另一个事务提交的数据,造成了前后两次查询结果不一致。幻读,专指新插入的行,一个事务读到了另一个事务已提交的插入的数据,导致多次查询结果不一致。
  • 隔离级别:读未提交、读已提交、重复读、可串行化。读未提交,引发问题脏读。读已提交,解决脏读,引发不可重复读。可重复读,解决脏读、不可重复读,未解决幻读。可串行化,解决脏读、不可重复读、幻读。

  • mysql,默认的隔离级别是可重复读;Oracle,默认的隔离级别是读已提交。
  • 写:丢失更新

    解决丢失更新:悲观锁、乐观锁。乐观锁要求程序员自己控制。

3、数据库连接池

  • 数据库的连接对象创建工作,比较消耗性能。
  • 数据库连接池,一开始先在内存中开辟一块空间(集合),往池子里放置多个连接对象。后面需要连接的话,直接从池子里面取,不要自己创建连接了。使用完毕,记得归还连接。确保连接对象能循环使用。
  • 如何实现归还连接?在DataSource 接口中,没有定义,所以添加了addBack()方法,用来归还连接。但是也出现了如下问题:
  • 如何解决?可以使用装饰者模式、动态代理等方法。


4、开源的连接池

  • DBCP,导入包,下面的方法不常用,为不使用配置文件连接数据库。

    使用配置文件连接数据库
  • C3P0,比较常用。下面是代码实现:

    下面是配置文件实现,如下图,只需要new以下就好,会默认去代码下加载配置文件,所以配置文件一定要按照官网上的命名:

5、DBUtils介绍

DBUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发。

  • 增删改


  • 下面是简化后的版本:
  • ResultSetHandler常用的实现类

6、DBUtils通用的增删改方法



7、DBUtils通用的查询方法

既然是通用的查询方法,可能想要查询的是不同的表,也就会返回不同的对象或者值,如何实现通用性呢?可以把封装数据这个工作交给用户,也就是多传一个对象参数,告诉函数本身,要封装成怎样的对象。




结束!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值