数据库连接池:C3P0
由于用户访问一次数据库就要申请一次Connection对象,但是这种向底层申请资源的行为是非常耗时的,为了节约时间,便产生了一种池子的技术,池子里面放的是数据库,我们就叫做数据库连接池。
数据库连接池是什么样的呢?就是为我们提供了一个容器,容器里存放多个链接,当一个用户进行访问时,就向容器中拿一个链接,用户使用完过后又把链接归还给容器,容器也就是我们的数据库连接池。这样一来,不仅节约了用户向底层申请链接的时间(高效),还提高了数据库连接池里几个链接的利用率(节约资源),不可谓不便利。
既然数据库连接池这个技术那么好用,我们要如何来使用呢?通过API查找javax.sql包下的一个标准接口我们可知,有一个获取链接的方法,其方法名为getConnection()。但一般也不需要我们去实现数据库连接池,由于其实现技术相较简单,代码也都是开源的,我们只需要使用其他驱动厂商实现的数据库连接池即可。
还有值得说的一点是,因为我们之前没使用数据库连接池之前,我们的代码里面会有Connection对象的.close的关闭连接的方法,但我们的数据库连接池是不需要关闭连接的,只需要将连接归还到连接池即可,所以,在实现数据库连接池的同时,各大厂商还加强了close方法的功能,使得在连接池下使用close方法不会将连接关闭,而是归还到连接池,这样我们写代码也变得方便了。
接下来说一下我们将会学习的两个数据库连接池,一个是C3P0,一个是Druid。两者中,前者是经典的数据库连接池技术,后者也是数据库连接池技术,但是后者是由阿里巴巴提供的,经过阿里的调试,号称是全世界最好的数据库连接池。
话不多说,让我们先来看一下C3P0是怎么使用的吧!
1.C3P0
首先让我们来看一下基本步骤:
-
导入jar包
首先要导入的是数据的驱动jar包(mysql-connector-java-5.1.37-bin.jar)不要因为这次讲的是C3P0二忘记 了之前的基础步骤。
关于C3P0的jar包(c3p0-0.9.5.2.jar和mchange-commons-java-0.2.12.jar),其中前者是C3P0的jar包,后者是C3P0依赖的jar包,后者中包含前者中的类会用到后者中的类的关系。
-
定义配置文件
C3P0有两种使用方式,通过查阅C3P0的文档中的Quickstart可知其硬编码方式,我们一般不推荐使用,因为维护的时候非常麻烦,想知道的可以自己去查阅,还有一种就是通过配置文件的形式,我们可以在使用文档中Configuration里面找到使用方法,其中,里面的一句话是这么说的,配置文件会在项目的类目录下去找到名字叫做c3p0.properties 或者 c3p0-config.xml的文件。
所以我们只需要将我们的配置文件命名为c3p0.properties 或者 c3p0-config.xml然后直接放在src目录下就好了。
我们再简单地了解一下xml文件里的内容:尖括号里是参数,我们只需要修改两个尖括号之间夹的内容就好了。我们可以根据尖括号里的参数得知,jdbcUel可以更改我们需要连接的数据库,initialPoolSize是初始化申请的链接数量,maxPoolSize是最大申请的连接数量,checkoutTimeout是超时时间。
-
创建核心对象
数据库连接池对象 ComboPooledDataSource
-
获取链接
getConnection
最后
我们可以通过简单地代码来看一下我们的数据库连接池是否创建成功
public class C3P0Demo1 {
public static void main(String[] args) throws SQLException {
DataSource ds = new ComboPooledDataSource();
Connection conn = ds.getConnection();
System.out.println(conn);
}
}