c3p0
需要的jar包
-
c3p0
(c3p0-0.9.5.2.jar
)下面的jar
包是依赖的jar
包 -
mchange-commons-java
(mchange-commons-java-0.2.12.jar
) - 对于
c3p0
使用时是只需要这两个包,但是连接数库库还是需要数据库驱动包,这一点不能忘记,如果是使用mysql
数据库,就需要添加mysql-connector-java-5.1.37-bin.jar
包
使用方式
硬编码
不推荐使用
配置文件
- 名称:定义配置文名称必须是
c3p0.properties
或c3p0-config.xml
,如果不是这两个名称中的一个就需要自己配置 - 路径:需要放置在类路径下,这样就可以自动寻找到,如果是在别的位置就需要自己配置
配置文件c3p0-config.xml
参考
<c3p0-config>
<!-- 使用默认的配置读取连接池对象 -->
<default-config>
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/travel</property>
<property name="user">root</property>
<property name="password">admin</property>
<!-- 连接池参数 -->
<!--初始化申请的连接数-->
<property name="initialPoolSize">5</property>
<!--最大连接数量,如果获取的连接数量超过这个数据就会在一定时间后报错(具体多长时间根据下一个参数配置的),该值需要和具体ID数据库类型和电脑性能来配置为最优的-->
<property name="maxPoolSize">10</property>
<property name="checkoutTimeout">3000</property>
</default-config>
<named-config name="otherc3p0">
<!-- 连接参数 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/travel</property>
<property name="user">root</property>
<property name="password">admin</property>
<!-- 连接池参数 -->
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">8</property>
<property name="checkoutTimeout">1000</property>
</named-config>
</c3p0-config>
- 上面有两个配置,其中一个是默认配置(包含在<default-config>标签里面),另外一个是具有具体
name
属性的配置(使用的是named-config
标签),具体使用那个是根据创建数据库连接池对象时是否传入具体name
属性 - 下面代码使用
new ComboPooledDataSource()
创建连接池对象,如果使用无参构造就是使用上面默认的配置。如果是使用使用指定名称的配置就是使用和name
名称相对应的那个配置new ComboPooledDataSource(“otherc3p0”)
获取连接代码
package top.twolovelypig.datasource.c3p0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
public class C3p0Demo {
public static void main(String[] args) throws SQLException {
// 创建数据库连接池对象
DataSource dataSource = new ComboPooledDataSource();
// 获取连接对象
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
druid连接池
导包
-
druid
(druid-1.0.9.jar
) - 同样还是需要数据库驱动包(
mysql-connector-java-5.1.37-bin.jar
)
配置文件
-
properties
格式 - 可以叫任意名称,放在任意目录下(也就意味着只能自己手动加载该配置文件)
使用
- 通过
DruidDataSourceFactory
工厂获取连接池对象 - 获取连接(通过
getConnection
方法)
配置文件
driverClassName=com.mysql.jdbc.Driver
# 正常的url=jdbc:mysql://localhost:3306/travel, 但是如果是连接本机地址,并且端口也是3306的话就可以简写如下
url=jdbc:mysql:///travel
username=root
password=admin
# 初始化的连接数量
initialSize=5
# 最大连接数
maxActive=10
# 超时时间
maxWait=3000
获取连接代码
package top.twolovelypig.datasource.druid;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties;
public class DruidDemo {
public static void main(String[] args) throws Exception {
// 加载配置文件
Properties properties = new Properties();
InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties");
properties.load(is);
// 获取连接池对象
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
System.out.println(connection);
}
}
使用工具类
一般来说连接池对象只有一个,也就是应该是单例的,所以可以不会再每一次使用的时候都去创建一个,所以可以使用工具类,每一次只需要返回连接即可。
package top.twolovelypig.datasource.util;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.sql.*;
import java.util.Properties;
public class DruidUtils {
private static DataSource dataSource;
static {
try {
Properties properties = new Properties();
properties.load(DruidUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
// 获取dataSource
dataSource = DruidDataSourceFactory.createDataSource(properties);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 获取连接
*
* @return
* @throws SQLException
*/
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public static void close(Statement stmt, Connection conn) {
close(null, stmt, conn);
}
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 获取连接池方法
*/
public static DataSource getDataSource() {
return dataSource;
}
}
网友评论