您现在的位置 >> Hadoop教程 >> Hadoop实战 >> 专题  
 

数据库连接池 dbcp与c3p0的使用

【作者:Hadoop实战专家】【关键词:】 【点击:88210次】【2013-07-1】
众所周知,无论现在是B/S或者是C/S应用中,都免不了要和数据库打交道。 用户需要上网的时候,他就可以从连接池中取得一个外部IP地址,从而对外网进行访问。下面主要通过两个例子描述下DBCP和c3p0的使用,同时给以比较。声明:ITeye文章版权属于作者,受法律保护。  

相关热门搜索:

大数据标签:hadoop hbase hive mahout bigdata

首页 资讯 精华 论坛 问答 博客 专栏 群组 更多▼

欢迎德尔惠361 0 收件箱 我的应用 我的博客 设置 退出

zc0604

* 博客
* 微博
* 相册
* 收藏
* 留言
* 关于我

数据库连接池 dbcp与c3p0的使用

博客分类: * 数据库

dbcpc3p0数据库连接池

众所周知,无论现在是B/S或者是C/S应用中,都免不了要和数据库打交道。在与数据库交

互过程中,往往需要大量的连接。对于一个大型应用来说,往往需要应对数以千万级的用户连

接请求,如果高效相应用户请求,对应用开发者而言是一个很重要的问题。下面就我所接触到

的解决方法分享给大家。
学过计算机网络的都知道,在一个内部局域网中,大部分用的都是私有地址,要想和外部

打交道,必须要有相应的合法外部地址相对应。然而内部用户数量巨大,一台机子一个外部IP

是不现实的。这样就有了一种叫做连接池的概念。因为不是每一个用户都要同时上网,当一个

用户需要上网的时候,他就可以从连接池中取得一个外部IP地址,从而对外网进行访问。当这

个用户不再需要上网的时候,这一个IP地址被放回连接池中,又可以给其他的用户访问。这里

的连接池是主要是为了解决IP地址数量问题的。而在数据库中,也有连接池的概念。我觉得这

个连接池主要是通过对连接的复用,从而更加高效的实现了对用户请求的响应。常见的供java

开发的连接池主要有DBCP和c3p0,当然在了解了连接池的原理后,用户也可以开发并创建自

己连接池。
数据库连接池的原理:可以参考这篇文章,不再赘述。。
http://www.kuqin.com/database/20080903/16384.html
下面主要通过两个例子描述下DBCP和c3p0的使用,同时给以比较。
1 DBCP。
DBCP是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使

用DBCP需要3个包:common-dbcp.jar,common-pool.jar,common-collections.jar.

Java代码

1.   public class DBCPUtils {
2.     private static DBCPUtils dbcputils=null;
3.     private BasicDataSource bds=null;
4.     private DataSourceConnectionFactory dscf=null;
5.     private DBCPUtils(){
6.         if(bds==null)
7.             bds=new BasicDataSource();
8.
9.         bds.setUrl(DBConsts.url);
10.         bds.setUsername(DBConsts.username);
11.         bds.setPassword(DBConsts.password);
12.         bds.setDriverClassName(DBConsts.driverclass);
13.
14.         bds.setMaxActive(100);
15.         bds.setInitialSize(20);
16.         bds.setMaxIdle(20);
17.         bds.setMinIdle(10);
18.
19.         dscf=new DataSourceConnectionFactory(bds);
20.     }
21.     public synchronized static DBCPUtils getInstance(){
22.         if(dbcputils==null)
23.             dbcputils=new DBCPUtils();
24.         return dbcputils;
25.     }
26.     public Connection getConnection(){
27.         Connection con=null;
28.         try {
29.             con=(Connection)dscf.createConnection();
30.         } catch (SQLException e) {
31.             // TODO Auto-generated catch block
32.             e.printStackTrace();
33.         }
34.         return con;
35.     }
36.
37.     public static void main(String[] args) throws SQLException {
38.         Connection con=null;
39.         long begin=System.currentTimeMillis();
40.         for(int i=0;i<1000000;i++){
41.             con=DBCPUtils.getInstance().getConnection();
42.             con.close();
43.         }
44.         long end=System.currentTimeMillis();
45.         System.out.println("耗时为:"+(end-begin)+"ms");
46.     }
47. }

结果为 :耗时为:2078ms

2 C3P0。
C3P0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现

jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。在使用时

需要导入c3p0-*.jar包。

Java代码

1. public class C3P0Utils {
2.     private static C3P0Utils dbcputils=null;
3.     private ComboPooledDataSource cpds=null;
4.     private C3P0Utils(){
5.         if(cpds==null){
6.             cpds=new ComboPooledDataSource();
7.         }
8.         cpds.setUser(DBConsts.username);
9.         cpds.setPassword(DBConsts.password);
10.         cpds.setJdbcUrl(DBConsts.url);
11.         try {
12.             cpds.setDriverClass(DBConsts.driverclass);
13.         } catch (PropertyVetoException e) {
14.             // TODO Auto-generated catch block
15.             e.printStackTrace();
16.         }
17.         cpds.setInitialPoolSize(100);
18.         cpds.setMaxIdleTime(20);
19.         cpds.setMaxPoolSize(100);
20.         cpds.setMinPoolSize(10);
21.     }
22.     public synchronized static C3P0Utils getInstance(){
23.         if(dbcputils==null)
24.             dbcputils=new C3P0Utils();
25.         return dbcputils;
26.     }
27.     public Connection getConnection(){
28.         Connection con=null;
29.         try {
30.             con=cpds.getConnection();
31.         } catch (SQLException e) {
32.             // TODO Auto-generated catch block
33.             e.printStackTrace();
34.         }
35.         return con;
36.     }
37.
38.     public static void main(String[] args) throws SQLException {
39.         Connection con=null;
40.         long begin=System.currentTimeMillis();
41.         for(int i=0;i<1000000;i++){
42.             con=C3P0Utils.getInstance().getConnection();
43.             con.close();
44.         }
45.         long end=System.currentTimeMillis();
46.         System.out.println("耗时为:"+(end-begin)+"ms");
47.     }
48. }

结果为 :耗时为:26094ms
此类为连接数据的常量值。

Java代码

1. public class DBConsts {
2.     public static final String url="jdbc:mysql://localhost:3306/deys";
3.     public static final String username="root";
4.     public static final String password="";
5.     public static final String driverclass="com.mysql.jdbc.Driver";
6.
7. }

通过以上两个程序可见,DBCP有着比C3P0更高的效率,但是实际应用中,DBCP可能出现丢失

连接的可能,而C3P0稳定性较高。因此在实际应用中,C3P0使用较为广泛。

* c3p0-0.9.1.jar (594.1 KB)
* 下载次数: 13

* commons-dbcp-1.4.jar (156.8 KB)
* 下载次数: 4

* commons-pool.jar (60.6 KB)
* 下载次数: 4

* mysql-connector-java-5.0.3-bin.jar (481.5 KB)
* 下载次数: 5

分享到:

设计模式之工厂模式

* 2011-08-29 15:18
* 浏览 222
* 评论(0)
* 收藏
* 分类:数据库
* 相关推荐

评论

发表评论

表情图标

字体颜色: 标准深红红色橙色棕色黄色绿色橄榄青色蓝色深蓝靛蓝紫色灰色白色黑色 字体大小: 标准1 (xx-small)2 (x-small)3 (small)4 (medium)5 (large)6 (x-large)7 (xx-large) 对齐: 标准居左居中居右

提示:选择您需要装饰的文字, 按上列按钮即可添加上相应的标签

(快捷键 Alt+S / Ctrl+Enter)

zc0604

* 浏览: 1710 次
* 性别:
* 来自: 北京
*
* 发短消息 关注

最近访客 更多访客>>

德尔惠361

yuanzong2862

MGGOON

winnie1985

文章分类

* 全部博客 (35)
* 数据库 (2)
* json/XML (2)
* java (10)
* android (0)
* 腾讯微博开源平台(java) (0)
* 设计模式 (1)
* uml (6)
* C/C++ (0)
* hadoop (6)
* mahout (1)
* hbase (6)
* hive (1)
* pig (0)
* http协议 (1)
* 文本分析与挖掘 (1)
* 杂谈 (1)
* 笔试面试经 (1)
* 日记 (0)

社区版块

* 我的资讯 (0)
* 我的论坛 (5)
* 我解决的问题 (0)

存档分类

* 2012-04 (5)
* 2012-03 (17)
* 2011-12 (2)
* 更多存档...

评论排行榜

* 练练看小游戏SWING的实现

最新评论

* alvin198761: 看过了,不错,值得研究下
练练看小游戏SWING的实现

------------
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。
? 2003-2011 ITeye.com. All rights reserved. [ 京ICP证110151号 京公网安备110105010620 ]

大数据系列相关文章:

最新评论
薇儿2014-09-10 11:24:39
【大数据未来会变成啥样?像人类大脑一样工作】当谈论大数据的时候,我们谈论什么? 通常是Hadoop和庞大的数据群。但是人类的大脑还远远没有进化到能够迅速接收这些数据,并对其加以分析和处理,并将结果用在现实世界中。http://t.cn/zR4U1Je
小宾2014-09-10 04:17:58
这是队列的方式吗?
BrookTang2014-09-09 04:01:07
Hadoop实战-初级部分 之 Hadoop IO http://t.cn/8FLVHEO (via @推酷网)
斷弦2014-09-08 06:05:29
6.3. 测试安装成功 22
发哥互联网载体营销推广团队2014-09-07 03:59:32
我还在弄
Shooterj2014-09-06 07:48:38
要考虑以后的数据和可扩展性,不能因为今天数据才几百GB就把不去考虑未来1、2年的几百TB了# 切勿妄谈Hadoop,以及4个数据管道打造实践-CSDN.NET http://t.cn/8siRofq
新浪数据库平台2014-09-06 06:05:53
[图片]
wenjun2014-09-05 08:45:51
现在 是用 -p 传了一个参数
天使总微笑2014-09-05 11:09:55
mark一下 Hadoop面试45个题目及答案: 1.Hadoop集群可以运行的3个模式? 单机(本地)模式 伪分布式模式 全分布式模式 2. 单机(本地)模式中的注意点? 在单机模式(standalone)中不会存在守护进程,所有... http://t.cn/8sGUd4E
橙子--微笑向暖2014-09-04 10:54:45
艺龙运维部继续招人,系统工程师,openstack 或 hadoop/hbase/storm 或 对linux系统、硬件等比较熟悉,擅长一个即可,简历发到 xu.zhao@corp.elong.com
 
  • Hadoop生态系统资料推荐