数据库连接池

一、 什么是连接池

  在JAVA中,我们经常会用到池的概念,比如常量池、线程池、连接池等等。那么池是什么呢,其实就是一个容器,例如数组或者集合。
  连接池就是将连接对象(Connection)放在一个容器中,供整个程序共享,可以减少连接创建和关闭的次数,实现连接的复用,提高程序执行的效率。

二、为什么要使用数据库连接池

1.传统方式(不使用连接池):

传统方式
  存在的问题:当通过Java程序连接数据库时,每次都创建连接,并基于连接访问数据库,用完连接后再将连接关闭(销毁),而创建连接和关闭连接需要消耗大量的时间和大量的资源(相对使用连接而言),而且连接得不到服用,导致程序的执行效率低下。

2.使用连接池:

使用连接池

使用C3P0连接池

1.导入c3p0开发包

导入c3p0开发包

2.在程序中创建数据库连接池(对象)

ComboPooledDataSource pool = new ComboPooledDataSource();

3.设置数据库连接的基本信息

1)方式一:(不推荐)

//设置连接数据库的基本信息(4个参数)
pool.setDriverClass("com.mysql.jdbc.Driver");
pool.setJdbcUrl("jdbc:mysql:///jt_db?characterEncoding=utf-8");
pool.setUser("root");
pool.setPassword("root");

  上面这种方式是将连接参数写死在程序中,如果后期需要修改参数,就得该程序源码,改完后还的重新编译程序,还得重复发布项目,非常麻烦。
  因此最好将这些可能经常发生变化的参数,提取到配置文件中。因为配置文件不是java文件,改完后不需要编译,也不会重复发布项目,比如只需要重启服务器,下次读取的就是最新的配置信息。

(2)方式二:(推荐)xml文件

在src(源码)目录下,提供一个c3p0-config.xml的文件,文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
       <property name="driverClass">
           com.mysql.jdbc.Driver
       </property>
       <property name="jdbcUrl">
           jdbc:mysql:///jt_db?characterEncoding=utf-8
       </property>
       <property name="user">root</property>
       <property name="password">root</property>
    </default-config>
</c3p0-config>

  上面这种方式要求,c3p0-config.xml文件的位置必须是源码目录,编译后会输出到类目录,将来程序执行时会到类的根目录下找指定名称(c3p0-config.xml)的文件,所以不仅位置是固定的,文件名也是固定的。如果位置不对或者文件名不对,即使内容配置再正确,c3p0程序也找不到该文件。
(3)方式三:(推荐)properties文件
在src(源码) 目录下创建一个c3p0.properties文件,文件内容如下:

c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///jt_db?characterEncoding=utf-8
c3p0.user=root
c3p0.password=root

  上面这种方式要求,c3p0.properties文件的位置必须是源码目录,编译后会输出到类目录,将来程序执行时会到类的根目录下找指定名称(c3p0.properties)的文件,所以不仅位置是固定的,文件名也是固定的。如果位置不对或者文件名不对,即使内容配置再正确,c3p0程序也找不到该文件。

4.将连接还回连接池

finally {
    /* 如果是自己创建的连接对象, 连接对象没有被修改过, 调用
     * conn.close()方法, 就是将连接关闭.
     * 如果是 从连接池中获取的一个连接对象, 连接对象其实已经
     * 被改造了,其中的close方法内部功能被改成了还连接到
     * 连接池中。所以调用conn.close是还连接到连接池。
     */
    //释放资源
    JdbcUtil.close(conn, stat, rs);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值