c3p0数据库连接池的使⽤详解
⾸先,什么是c3p0?下⾯是百度百科的解释:
C3P0是⼀个开源的JDBC连接池,它实现了数据源和JNDI绑定,⽀持JDBC3规范和JDBC2的标准扩展。⽬前使⽤它的开源项⽬
有Hibernate,Springcrocodile
托福考试试题 使⽤连接池和我们平时写的JDBC代码相⽐较有什么优点呢?
资源重⽤:
由于数据库连接得以重⽤,避免了频繁创建,释放连接引起的⼤量性能开销。在减少系统消耗的基础上,另⼀⽅⾯也增加了系统运⾏环境的平稳性。
更快的系统反应速度:
数据库连接池在初始化过程中,往往已经创建了若⼲数据库连接置于连接池中备⽤。此时连接的初始化⼯作均已完成。对于业务请求处理⽽⾔,直接利⽤现有可⽤连接,避免了数据库连接初始化和释放过程的时间开销,从⽽减少了系统的响应时间。
新的资源分配⼿段:
对于多应⽤共享同⼀数据库的系统⽽⾔,可在应⽤层通过数据库连接池的配置,实现某⼀应⽤最⼤可⽤数据库连接数的限制,避免某⼀应⽤独占所有的数据库资源。
统⼀的连接管理,避免数据库连接泄露:
在较为完善的数据库连接池实现中,可根据预先的占⽤超时设定,强制回收被占⽤连接,从⽽避免了常规数据库连接操作中可能出现的资源泄露。
如何在⾃⼰的项⽬中使⽤c3p0呢?
1. 导jar包:
2. 两种⽅式可以建⽴c3p0连接,第⼀种⽅式是代码⽅式,Demo如下:
package com.wang.utils;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DriverManager;品种英文
inturnimport java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
hange.v2.c3p0.ComboPooledDataSource;
elitespublic class JDBCutils {
private static Connection conn;
private static ComboPooledDataSource ds = new ComboPooledDataSource();
public static Connection getConnection() {
try {
ds.tDriverClass("sql.jdbc.Driver");
urname
ds.tJdbcUrl("jdbc:mysql://localhost:3306/test?
uUnicode=true&characterEncoding=UTF8&uServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=2 56&rewriteBatchedStatements=true");
ds.tUr("root");
ds.tPassword("123");
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return conn;
1 100英语
}
第⼆种是使⽤读取配置⽂件的⽅式,要求是,配置⽂件必须命名为l,并且放在src⽬录下,配置⽂件如下:participate
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
红宝书考研英语词汇<default-config>
<property name="jdbcUrl">
<![CDATA[
jdbc:mysql://localhost:3306/test?
uUnicode=true&characterEncoding=UTF8&uServerPrepStmts=true&prepStmtCacheSqlLimit=256&cachePrepStmts=true&prepStmtCacheSize=2 56&rewriteBatchedStatements=true
]]>
</property>
<property name="driverClass"&sql.jdbc.Driver</property>
<property name="ur">root</property>
<property name="password">123</property>
<!--当连接池中的连接耗尽的时候c3p0⼀次同时获取的连接数。Default: 3 -->
<property name="acquireIncrement">3</property>
<!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize">10</property>
<!-- 数据库连接池中的最⼩的数据库连接数 -->
<property name="minPoolSize">2</property>
<!-- 数据库连接池中的最⼤的数据库连接数 -->
<property name="maxPoolSize">10</property>
</default-config>
</c3p0-config>
java代码部分:
package com.wang.utils;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
hange.v2.c3p0.ComboPooledDataSource;
public class JDBCutils {
金星网private static Connection conn;
private static ComboPooledDataSource ds = new ComboPooledDataSource();
public static Connection getConnection() {
try {
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
} catch (PropertyVetoException e) {
e.printStackTrace();
}
return conn;
}
注意,配置⽂件⾥可以写多个数据库配置,上⾯的配置⽂件代码,我们是放在default-config标签下,可以再添加⼀个⽤<named-config
name="mysqlConfig">标签修饰的配置,只需要在代码中,将name的值,放在new ComboPooledDataSource("mysqlConfig")中即可,