数据库连接池与DBUtils工具
数据库连接池
什么是数据库连接池
在JDRCS程中, 每次创建和断开Connection对象都会消耗定的时间和IO资源,这是因为在Java程序与数据库之间建立连接时,数据库端要验证用户名和密码,并且要为这个连接分配资源,Jave程序则要把代表连接的java.sql Connection对象等加载到内存中,所以建立数据库连接的开销很大,尤其是在大量的并发访问时。假如某网站一天的访问量是 10万,那么,该网站的服务器就需要创建、断开连接10万次,频繁地创建、断开数据库连接势必会影响数据库的访问效率,甚至导致数据库崩溃。
为了避免频繁地创建数据库连接,数据库连接池技术应运而生。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立。接下来,通过一张图来简单描述应用程序如何通过连接池连接数据库,如下图
用户1 | —— | 应用程序 | 使用连接池中了解与数据库通信 | 数据库 | ||
用户2 | —— | <——————————————> <——> 连接池 <—— | ||||
用户3 | —— | connection | connection | connection | ||
用户4 | —— | connection | connection | connection | ||
用户n | —— | connection | connection | connection |
可以看出,数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,当应用程序访问数据库时并不是直接创建Connection, 而是向连接池“申请”一个Connection。如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,提高数据库的访问效率。
DataSource接口
为了获取数据库连接对象( Connection ),JDBC 提供了javax.sql.DataSource 接口,它负责与数据库建立连接,并定义了返回值为Connection对象的方法,具体如下。
1.Connection getConnection()
2.Connection getConnection(String username, String password)
上述两个重载的方法都能用来获取Connection对象。不同的是,第1个方法是通过无参方式建立与数据库的连接,第2个方法是通过传入登录信息的方式建立与数据库的连接。
DBCP数据源
DBCP是数据库连接池(DataBase Connection Pool)的简称,是Apache组织下的开源连接池实现,也是Tomcat服务器使用的连接池组件。单独使用DBCP数据源时,需要在应用程序
中导入两个JAR包,具体如下。
1.commons-dbcp.jar包
commons-dbcp.jar包是DBCP数据源的实现包,包含所有操作数据库连接信息和数据库连接池初始化信息的方法,并实现了DataSource接口的getConnection()方法。
2. commons-pool.jar包
commons-pool.jar包是DBCP数据库连接池实现包的依赖包,为commons-dbcp.jar包中的方法提供了支持。可以这么说,没有该依赖包,commons-dbcp.jar包中的很多方法就没有办法实现。
这两个JAR包可以在Apache官网地址“http://commons.apache.org/proper/”中查询下载到。其中,commons-dbcp.jar中包含两个核心的类,分别是BasicDataSourceFactory和BasicDataSource,它们都包含获取DBCP数据源对象的方法。
1.通过BasicDataSource类直接创建数据源对象
创建cn.itcast.chapter10.example下创建example01类
运行出:
2,通过读取配置文件创建数据源对象
在src里创建dbcp.properties文件用于设置数据库的连接信息和数据源的初始化信息
cn.itcast.chapter10.example下创建example02类与运行结果
运行出:
C3P0数据源
C3PO是目前最流行的开源数据库连接池之一,它实现了DataSource 数据源接口,支持JDBC2和JDBC3的标准规范,易于扩展并且性能优越,著名的开源框架Hibernate和Spring都支持该数据源。在使用C3P0数据源开发时,需要了解C3PO中DataSource 接口的实现类ComboPooledDataSource,它是C3PO的核心类,提供了数据源对象的相关方法
1,通过ComboPooledDataSource()构造方法创建数据源对象
项目下导入c3p0-0.9.1.2.jar在cn.itcast.chapter10.example下创建example03类与运行结果
2,通过读取配置文件创建数据源对象
在src目录下创建c3p0-config.xml文件,用于设置数据库的连接信息和数据源的初始化信息
在cn.itcast.chapter10.example下创建example04类与运行结果
DBUtils工具
工具介绍:为了更加简单地使用JDBC, Apache组织提供了一个DBUMIS工具,它是操作数据库的个组件,实现了对JDBC的简单封装,可以在不影响性能的情况下极大地简化JDBC的编码工作量。DBUtils工具可以在http://commons .apache orgrpercommons-,doutistindex ntml"下载到,截止到目前它的最新版本为Apache Commons DbUtils 1.6,本节也是针对该版本进行讲解的。
DBUtis I具的核心是org apache. commons dbutis QuenRuner类和org.apache.commons.dbutis. ResulSetHandler接口,了解它们对于DBUuis 工具的学习和使用非常重要。在接下来的小书中,将对 DBUtils工具的QueryRunner类、ResultSetHandler接口以及提口的实现资进行详细的讲解。
QueryRunner 类, ResulSetHandler接口, ResulSetHandler实现类
BeanHandler和BeanListHandler两者区别
在Navicat Premium软件建表
下载DBUtils工具jar包commons-dbutils-1.6.jar到lib目录下,第九章JDBCUtils.java复制到cn.itcast.chapter10.example下并创建BaseDdao类与User类
cn.itcast.chapter10.example下并创建ResultSetTest1类与ResultSetTest2类,分别运行结果为
ScalarHandler方法
cn.itcast.chapter10.example下并创建ResultSetTest3类,运行结果为