为何要使用连接池
我们在日常进行数据库操作的时候,每一次都要申请资源,在使用完成之后释放资源。这种操作是非常浪费资源的做法,我们为了解决的这个问题,就引入了数据库连接池。
数据库连接池
概念:其实就是一个容器(集合),存放数据库连接的容器,
当系统初始化好后,容器被创建,容器会申请一些连接对象,存储在容器中,当用户来访问数据库时,从容其中获取连接对象,用户访问完毕之后,会将连接对象归还容器。
好处:
- 节约资源
- 高效
数据库连接池的实现
1.标准接口:DataSource javax.sql包下的
1.方法:
*获取连接:getConnection()
*归还连接:如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法,则不会关闭连接,而是归还连接到连接池。
2.一般我们不自己去实现他,由数据库厂商来实现
1.C3P0
2.Druid:由阿里巴巴提供的数据库连接池
C3P0数据库连接池的使用
1. 导入jar包
一共有两个jar包:
1.mchange-commons-java-0.2.11
2.c3p0-0.9.5.2
2. 定义配置文件
名称:c3p0.properties或者c3p0.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://localhost:3306/day09</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<!--最大连接数量-->
<property name="maxPoolSize">10</property>
<!-- 超时时间-->
<property name="checkoutTimeout">3000</property>
</default-config>
<named-config name="mySource">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/day09</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<!--最大连接数量-->
<property name="maxPoolSize">10</property>
<!-- 超时时间-->
<property name="checkoutTimeout">3000</property>
</named-config>
</c3p0-config>
3. 创建核心对象,数据库连接池对象:
ComboPooledDataSource
4. 获取连接:
getConnection()
代码示例:
//1.创建数据库连接池
ComboPooledDataSource cpds = new ComboPooledDataSource();
//2.获取连接
try {
con = cpds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(con);
Druid数据库连接池
基本操作和C3P0相同:
1. 导入jar包
2. 定义配置文件
是properties文件,可以叫做任何的名称,放在任意的目录下
3.加载配置文件
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
Properties pro = new Properties();
pro.load(is);
4. 获取数据库连接池对象:通过工厂类来获取
DruidDataSourceFactory
5. 获取连接
DataSource dataSource = DruidDataSourceFactory.createDataSource(pro);
Connection conn = dataSource.getConnection();
System.out.println(conn);