目录
一、举例解释连接池
一直用jdbc的我突然发现一个好东西,那就是连接池,举一个不恰当的例子来说说jdbc和连接池的区别
比如有一家餐馆,如果是jdbc的形式去运营该餐馆就是,每当来客人吃饭的时候,就需要去招工人,当客人走的时候,那你又把工人给辞了,也就是每次都需要获取连接,然后又要关闭连接的意思,如果是连接池的形式去运营该餐馆就是,在我刚开业的时候去招一些员工,每当有客人的时候,直接让员工去服务,客人走了,员工休息就行,也就是第一次的时候初始化一个连接数,放在一个池子里,每当用的时候直接去池子里取,用完之后再放回池子。
二、c3p0
在使用c3p0这个连接池的时候需要导入三个jar包,分别是c3p0的jar包、c3p0所依赖的jar包和数据库连接的jdbc包
c3p0的两个jar包官网下载链接sourceforge.net/projects/c3…
连接数据库的jdbc包,这里以mysql为例子,官方链接dev.mysql.com/downloads/c…
当把这三个jar包都导入之后,接下来就是代码了
首先是需要一个c3p0-config.xml的文件,放在src下,在这里需要注意它是认名字的,别起错名了
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<!--连接参数-->
<!--driverClass是mysql的数据库驱动-->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!--jdbcUrl是连接数据库的url,其中mydb是自己的数据库名-->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=false</property>
<!--user是数据库的用户名-->
<property name="user">root</property>
<!--password是数据库的密码-->
<property name="password">root</property>
<!--连接池参数-->
<!--initialPoolSize是初始化申请的连接数量,取值应在minPoolSize与maxPoolSize之间 -->
<property name="initialPoolSize">5</property>
<!--连接池中最大的连接数 -->
<property name="maxPoolSize">10</property>
<!--超时时间,就是连接等待的时间,超过这个时间就认为连接失败-->
<property name="checkoutTimeout">3000</property>
</default-config>
<named-config name="mysql">
<!--连接参数-->
<property name="user">root</property>
<property name="password">root</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?useSSL=false</property>
<!--连接池参数-->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">3000</property>
</named-config>
</c3p0-config>
当把这个.xml文件写好后,需要再写一个java类
package com;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
/**
* c3p0的演示
*/
public class C3P0Demo {
public static void main(String[] args) throws SQLException {
//创建数据库连接池对象,里面没有参数是默认参数,有参数的是我们自定义的
DataSource ds = new ComboPooledDataSource();
//DataSource ds = new ComboPooledDataSource("mysql");
//获取连接对象
Connection conn = ds.getConnection();
//打印
System.out.println(conn);
}
}
到此就写完了,运行结果如下:
三、druid
讲完了c3p0再讲这个就简单多了,大致思想是一样的,这个只需导入两个包,druid包和数据库连接的jdbc包
druid下载链接repo1.maven.org/maven2/com/…
jdbc下载链接dev.mysql.com/downloads/c…
当把这两个jar包导入之后,需要一个.properties文件,我这里是druid.properties文件,这个文件最好放在src下
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=root
#初始化连接数
initialSize=5
#最大连接数
maxActive=10
#最大等待时间
maxWait=3000
接下来需要写一个java类
package com.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
public static void main(String[] args) throws Exception {
//加载配置文件
Properties pro = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
pro.load(is);
//获取连接池对象
DataSource ds = DruidDataSourceFactory.createDataSource(pro);
//获取连接
Connection conn = ds.getConnection();
System.out.println(conn);
}
}
运行结构如下: