JavaWeb作业:数据库连接池与BDUtils工具

数据库连接池

1、什么是数据库连接池

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
原理
连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

2、DataSource接口

作为 DriverManager 工具的替代项,DataSource 对象是获取连接的首选方法。实现 DataSource 接口的对象通常在基于 JavaTM Naming and Directory Interface (JNDI) API 的命名服务中注册。

DataSource 接口由驱动程序供应商实现。共有三种类型的实现:

基本实现 - 生成标准的 Connection 对象
连接池实现 - 生成自动参与连接池的 Connection 对象。此实现与中间层连接池管理器一起使用。
分布式事务实现 - 生成一个 Connection 对象,该对象可用于分布式事务,大多数情况下总是参与连接池。此实现与中间层事务管理器一起使用,大多数情况下总是与连接池管理器一起使用。
文章知识点与官方知识档案匹配,可进一步学习相关知识

3.BDCP数据源

DBCP依赖commons-pool对象池,所以需要commons-dbcp.jar , commons-pool.jar
DBCP的BasicDataSource提供了close()方法,所以再XML配置文件中需要制定destory-method=“close”,以便Spring正常关闭数据源。

二、BDUtile工具

1.DButils的介绍

为了更加简单方便地使用JDBC,Apache组织提供了DButils工具,它是一个数据库的操作组件,实现了对JDBC的简单封装,在性能不受影响的条件下简化JDBC的操作。目前最新的版本应该是1.7的版本

2.QueryRunner的简介

QueryRunner类的使用极大的简化SQL语句的执行代码,与ResultSetHandler组合可以完成数据库的各种操作,QueryRunner类提供了 带有参数 的构造方法,此方法以javax.sql.DataSource为参数传入到QueryRunner的构造方法中获取Connection对象, 并且 针对不同的数据库操作,提供了不同的方法。
query(String sql ,ResultSetHandler rsh, Object … params)

查询方法,这里的第二个 参数是ResultSetHandler 接口,查询的的是结果的信息,要求返回的是JavaBean
,泛型就是Bean类,在此需要建立接口的匿名实现类,重写handle并返回Bean对象,这里大概先知道有这么回事就行,一会看代码时具体解释,
这里的params是可变的参数,根据 SQL语句的具体情况设置参数。

update(String sql, Object … params)

用与删除,插入,更新数据库信息,同样的params是可变参数。

3.ResultSetHandler接口

ResultSetHandler接口用于处理RestultSet结果集,它可以将结果集中的数据转为不同形式,根据结果的数据类型的不同,ResultSetHandler提供了几种常见的实现类,具体如下:

BeanHander:结果集分装到JavaBean中, 保存一条数据。
BeanListHandler:将结果的每一条数据都分装到JavaBean实例中,存放到List,也就是保存多条数据

4.QueryRunner的基本使用

添加数据

public void testinsert() throws SQLException { ComboPooledDataSource
datasource = new ComboPooledDataSource(); QueryRunner queryrunner =
new QueryRunner(datasource); queryrunner.update(“insert into balance
values(?,?)”, “Bob”,192); }

更新数据

public void testupdate() throws SQLException { QueryRunner
queryrunner = new QueryRunner(new ComboPooledDataSource());
queryrunner.update(“update balance set balance = ? where name = ?”,
8160, “Bob”); }

删除数据

public void testdelete() throws SQLException { QueryRunner
queryrunner = new QueryRunner(new ComboPooledDataSource());
queryrunner.update(“delete from balance where name=?”, “Bob”); }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值