C3P0是一个开源的JDBC(sun公司定义的用于执行SQL语句的Java API)。目前使用它的有Hibernate
,Spring
等。
C3P0与dbcp区别
- dbcp没有自动回收空闲连接的功能
- c3p0有自动回收空闲连接功能
- 在导入jar包C3P0只需要一个jar包,dbcp需要两个jar包。
使用C3P0有两种方式
- 硬编码 开发中不建议
- 配置文件
先说一下硬编码使用,记得导入jar包。
// C3p0
// 1. 硬编码的方式
ComboPooledDataSource datasource =new ComboPooledDataSource();
datasource.setDriverClass("com.mysql.jdbc.Driver");
datasource.setJdbcUrl("jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf8");
datasource.setUser("root");
datasource.setPassword("123456");
// 使用dbutils操作SQL语句
QueryRunner qr = new QueryRunner(datasource);
String sql = "insert into users(id, username, PASSWORD) values(?, ?, ?);";
Object[] params = {"100", "h", "10"};
int row = qr.update(sql, params);
System.out.println(row);
上面硬编码的方式需要手动设置数据库的的信息,开发中常使用配置文件的方式。
配置文件有两种方式,一种是.properties另一种是.xml。我们先看下文档
![](https://img.haomeiwen.com/i8163699/6e7db2a45b6fe9f6.png)
上面的说的意思是:
- 告诉我们配置可以是
c3p0-config.xml
或者从c3p0.properties
。 - 配置的文件在class文件的最顶层既工程src目录下。
c3p0.properties的配置:
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql://localhost:3306/mybase?useUnicode=true&characterEncoding=utf8
c3p0.user=root
c3p0.password=123456
c3p0-config.xml的配置
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mybase?useUnicode=true&characterEncoding=utf8</property>
<property name="user">root</property>
<property name="password">123456</property>
<!-- 扩展配置-->
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
<!-- 命名空间的配置-->
<named-config name="coderhong">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/mybase?useUnicode=true&characterEncoding=utf8</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="acquireIncrement">50</property>
<property name="initialPoolSize">100</property>
<property name="minPoolSize">50</property>
<property name="maxPoolSize">1000</property>
<!-- intergalactoApp adopts a different approach to configuring statement caching -->
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">5</property>
</named-config>
对于c3p0-config.xml的配置说一下:
命名空间<named-config name="coderhong">
重要是针对ComboPooledDataSource
构造方法。
new ComboPooledDataSource(String configName);
该方法加载xml配置中指定的命名空间的c3p0的配置,如果项目中用了多种数据库可以用到。
提示:如果我们我们指定了命名空间,加载时发现没有,它会自动加载默认的配置。
我们可以自己封装一个基于c3p0的工具类:DataSourceUtils.class
public class DataSourceUtils {
private static ComboPooledDataSource ds = new ComboPooledDataSource();
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
// 获取连接池
public static DataSource getDataSource() {
return ds;
}
public static void close(Connection conn, ResultSet set) {
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(set != null) {
try {
set.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
网友评论