dbcp和c3p0dbcp c3p0 哪个好好?c3p0可以代替DBCP么?

数据库连接池 dbcp与c3p0的使用 -
- ITeye技术网站
博客分类:
&& 众所周知,无论现在是B/S或者是C/S应用中,都免不了要和数据库打交道。在与数据库交
互过程中,往往需要大量的连接。对于一个大型应用来说,往往需要应对数以千万级的用户连
接请求,如果高效相应用户请求,对应用开发者而言是一个很重要的问题。下面就我所接触到
的解决方法分享给大家。
&& 学过计算机网络的都知道,在一个内部局域网中,大部分用的都是私有地址,要想和外部
打交道,必须要有相应的合法外部地址相对应。然而内部用户数量巨大,一台机子一个外部IP
是不现实的。这样就有了一种叫做连接池的概念。因为不是每一个用户都要同时上网,当一个
用户需要上网的时候,他就可以从连接池中取得一个外部IP地址,从而对外网进行访问。当这
个用户不再需要上网的时候,这一个IP地址被放回连接池中,又可以给其他的用户访问。这里
的连接池是主要是为了解决IP地址数量问题的。而在数据库中,也有连接池的概念。我觉得这
个连接池主要是通过对连接的复用,从而更加高效的实现了对用户请求的响应。常见的供java
开发的连接池主要有DBCP和c3p0,当然在了解了连接池的原理后,用户也可以开发并创建自
己连接池。
&&& 数据库连接池的原理:可以参考这篇文章,不再赘述。。
&&& /database/84.html
&&& 下面主要通过两个例子描述下DBCP和c3p0的使用,同时给以比较。&
1 DBCP。
&& DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使
用DBCP需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar.
public class DBCPUtils {
private static DBCPUtils dbcputils=
private BasicDataSource bds=
private DataSourceConnectionFactory dscf=
private DBCPUtils(){
if(bds==null)
bds=new BasicDataSource();
bds.setUrl(DBConsts.url);
bds.setUsername(DBConsts.username);
bds.setPassword(DBConsts.password);
bds.setDriverClassName(DBConsts.driverclass);
bds.setMaxActive(100);
bds.setInitialSize(20);
bds.setMaxIdle(20);
bds.setMinIdle(10);
dscf=new DataSourceConnectionFactory(bds);
public synchronized static DBCPUtils getInstance(){
if(dbcputils==null)
dbcputils=new DBCPUtils();
public Connection getConnection(){
Connection con=
con=(Connection)dscf.createConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void main(String[] args) throws SQLException {
Connection con=
long begin=System.currentTimeMillis();
for(int i=0;i&1000000;i++){
con=DBCPUtils.getInstance().getConnection();
con.close();
long end=System.currentTimeMillis();
System.out.println("耗时为:"+(end-begin)+"ms");
}
结果为 :耗时为:2078ms
2 C3P0。
&& C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现
jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。在使用时
需要导入c3p0-*.jar包。
&&& public class C3P0Utils {
private static C3P0Utils dbcputils=
private ComboPooledDataSource cpds=
private C3P0Utils(){
if(cpds==null){
cpds=new ComboPooledDataSource();
cpds.setUser(DBConsts.username);
cpds.setPassword(DBConsts.password);
cpds.setJdbcUrl(DBConsts.url);
cpds.setDriverClass(DBConsts.driverclass);
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
cpds.setInitialPoolSize(100);
cpds.setMaxIdleTime(20);
cpds.setMaxPoolSize(100);
cpds.setMinPoolSize(10);
public synchronized static C3P0Utils getInstance(){
if(dbcputils==null)
dbcputils=new C3P0Utils();
public Connection getConnection(){
Connection con=
con=cpds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
public static void main(String[] args) throws SQLException {
Connection con=
long begin=System.currentTimeMillis();
for(int i=0;i&1000000;i++){
con=C3P0Utils.getInstance().getConnection();
con.close();
long end=System.currentTimeMillis();
System.out.println("耗时为:"+(end-begin)+"ms");
}
结果为 :耗时为:26094ms
此类为连接数据的常量值。
public class DBConsts {
public static final String url="jdbc:mysql://localhost:3306/deys";
public static final String username="root";
public static final String password="";
public static final String driverclass="com.mysql.jdbc.Driver";
通过以上两个程序可见,DBCP有着比C3P0更高的效率,但是实际应用中,DBCP可能出现丢失
连接的可能,而C3P0稳定性较高。因此在实际应用中,C3P0使用较为广泛。
(594.1 KB)
下载次数: 168
(156.8 KB)
下载次数: 99
下载次数: 101
(481.5 KB)
下载次数: 52
浏览 17378
浏览: 155012 次
来自: 北京
很棒的小demo
阿斯达是事实上事实上事实上
试了下新浪微博的登录, 没有成功啊登录后重定向public S ...
请问腾讯微博 p_skey这个cookie怎么取?c3p0和dbcp进行配置数据库连接池上的区别
c3p0和dbcp进行配置数据库连接池上的区别
第一、C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现&
jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。在使用时&
需要导入c3p0-*.jar包。
c3p0在进行数据库连接时,对数据库的配置文件db.properties有一定的限制
driver,url、username、password都要按照固定的参数名来命名,否则会报错
&bean id=&dataSource& class=&com.mchange.boPooledDataSource&&
&!-- 用户名--&
&property name=&user& value=&${username}&/&
&!-- 用户密码--&
&property name=&password& value=&${password}&/&
&property name=&driverClass& value=&${driver_class}&/&
&property name=&jdbcUrl& value=&${url}&/&
&/bean&driver参数命名为diverClass
url参数命名为jdbcUrl
username参数要命名为user
password参数命名为password
&property name=&maxPoolSize& value=&10& /&只能写成maxPoolSize
&property name=&maxIdleTime& value=&5& /&只能写成maxIdleTime
第二、&DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使&
用DBCP需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar.&
但是dbcp对参数名的定义没有限制
但是实际应用中,DBCP可能出现丢失连接的可能,而C3P0稳定性较高。因此在实际应用中,C3P0使用较为广泛。
我的热门文章
即使是一小步也想与你分享下次自动登录
现在的位置:
& 综合 & 正文
dbcp,c3p0,proxool三种数据库连接池比较(基于Oracle9i)
DBCP ,C3P0和 PROXOOL 三种常用开源数据库连接池的性能比较 ——基于Oracle 9i 版本:V2.0 日期: 作者:孙欢欢() 1.测试环境: 1.1 操作系统:windows xp sp3 1.2 数据库:oracle 9i 1.3 web服务器:Tomcat 6.0.20 1.4测试工具:jakarta-jmeter-2.3.4 2.测试条件: dbcp , c3p0 , proxool的 initialSize=&10& maxldle=&15& minIdle=&5& 其余参数为默认值; *从100000条数据中读出一条数据; 3. jmeter测试设置及结果 3.1 在3秒内模拟30个线程,循环5次 3.1.1 dbcp
3.1.2c3p0 3.1.3 proxool 3.2 在3秒内模拟60个线程,循环5次
3.2.1 dbcp 3.2.2 C3p0 3.2.3proxool 3.3. 在6秒内模拟60个线程,循环5次 3.3.1 dbcp 3.3.2 c3p0 3.3.3 Proxool 3.4 6秒内模拟120个进程循环5次 3.4.1 dbcp 3.4.2 c3p0 3.4.3 proxool 3.5 10秒模拟120个进程循环5次 3.5.1 dbcp 3.5.2 c3p0 3.5.3 proxool 3.6 10秒模拟150个进程循环5次 3.6.1 dbcp 3.6.2 c3p0 3.6.3 proxool 3.7 10秒模拟200个进程循环5次 3.7.1 dbcp 3.7.2 c3p0 3.7.3 proxool 4.测试结果分析: (1)相同时间内同等量的线程数和循环次数下:通过对三个连接池的三个标志性性能测试参数(Average,median,90%Line)进行比较发现:dbcp=c3p0&proxool 5. 测试结论 通过对三种数据库连接池的性能测试发现,dbcp和c3p0 能够更好的支持高并发,但是在稳定性方面,c3p0略逊于DBCP。 注:(个人认为此原因可能是由于tamcat与dbcp同属Apache旗下的缘故,dbcp可能针对tamcat采取了优化。也许在其他服务器下会得出截然相反的结果。)
&&&&推荐文章:
【上篇】【下篇】

我要回帖

更多关于 commons dbcp 1.4.jar 的文章

 

随机推荐