近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机

  应用程序已从传统的桌面应用转到Web应用。基于B/S(Browser/Server)架构的3层开发模式逐渐代替C/S(Client/Server)架构的开发模式,成为开发企业级应用和电子商务普遍採用的技术。

在Java语言中,JDBC(Java DataBase Connection)是应用程序与数据库沟通的桥梁,

  即Java语言通过JDBC技术訪问数据库。JDBC是一种“开放”的方案,它为数据库应用开发者﹑数据库前台工具开发者提供了一种标准的应用程序设计接口,使开发者能够用纯Java语言编写完整的数据库应用程序。JDBC提供两种API,各自是面向开发者的API和面向底层的JDBC驱动程序API,底层主要通过直接的JDBC驱动和JDBC-ODBC桥驱动实现与数据库的连接。

  一般来说,Java应用程序訪问数据库的过程是:

  ①装载数据库驱动程序;

  ②通过JDBC建立数据库连接;

  ③訪问数据库,运行SQL语句;

  ④断开数据库连接。

JDBC作为一种数据库訪问技术,具有简单易用的长处。但使用这样的模式进行Web应用
  程序开发,存在非常多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,并且系统还要分配内存资源。这个时间对于一次或几次数据库操作,也许感觉不出系统有多大的开销。但是对于如今的Web应用,尤其是大型电子商务站点,同一时候有几百人甚至几千人在线是非常正常的事。在这样的情况下,频繁的进行数据库连接操作势必占用非常多的系统资源,站点的响应速度必然下降,严重的甚至会造成server的崩溃。不是危言耸听,这就是制约某些电子商务站点发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,假设程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,终于将不得不重新启动数据库。还有,这样的开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,server崩溃。

由上面的分析能够看出,问题的根源就在于对数据库连接资源的低效管理。我们知道,

  对于共享资源,有一个非常著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配﹑释放所造成的问题。为解决上述问题,能够採用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当须要建立数据库连接时,仅仅需从“缓冲池”中取出一个,使用完成之后再放回去。我们能够通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们能够通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑測试及性能调整提供根据。
dbcp数据库连接池代码使用例如以下:

package util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import org.apache.commons.dbcp.BasicDataSource;
import org.apache.log4j.Logger; /**
* Description: 数据库连接池类
* @filename DataSourceFactory.java
* @date 2013年8月21日 19:47:21
* @author Herman.Xiong
* @version 1.0
* Copyright (c) 2013 Company,Inc. All Rights Reserved.
*/
public class DataSourceFactory {
private static Logger log = Logger.getLogger(DataSourceFactory.class);
private static BasicDataSource bs = null;
public static String driver,url,userName,password; /**
* 创建数据源
* @return
*/
public static BasicDataSource getDataSource() throws Exception{
if(bs==null){
log.info("数据库连接信息:[driver:"+driver+",url:"+url+",userName:"+userName+",password:"+password+"]");
bs = new BasicDataSource();
bs.setDriverClassName(driver);
bs.setUrl(url);
bs.setUsername(userName);
bs.setPassword(password);
bs.setMaxActive(200);//设置最大并发数
bs.setInitialSize(30);//数据库初始化时,创建的连接个数
bs.setMinIdle(50);//最小空暇连接数
bs.setMaxIdle(200);//数据库最大连接数
bs.setMaxWait(1000);
bs.setMinEvictableIdleTimeMillis(60*1000);//空暇连接60秒中后释放
bs.setTimeBetweenEvictionRunsMillis(5*60*1000);//5分钟检測一次是否有死掉的线程
bs.setTestOnBorrow(true);
}
return bs;
} /**
* 释放数据源
*/
public static void shutDownDataSource() throws Exception{
if(bs!=null){
bs.close();
}
} /**
* 获取数据库连接
* @return
*/
public static Connection getConnection(){
Connection con=null;
try {
if(bs!=null){
con=bs.getConnection();
}else{
con=getDataSource().getConnection();
}
} catch (Exception e) {
log.error(e.getMessage(), e);
}
return con;
} /**
* 关闭连接
*/
public static void closeCon(ResultSet rs,PreparedStatement ps,Connection con){
if(rs!=null){
try {
rs.close();
} catch (Exception e) {
log.error("关闭结果集ResultSet异常!"+e.getMessage(), e);
}
}
if(ps!=null){
try {
ps.close();
} catch (Exception e) {
log.error("预编译SQL语句对象PreparedStatement关闭异常!"+e.getMessage(), e);
}
}
if(con!=null){
try {
con.close();
} catch (Exception e) {
log.error("关闭连接对象Connection异常!"+e.getMessage(), e);
}
}
}
}

java数据库连接池dbcp的使用的更多相关文章

  1. [数据库连接池] Java数据库连接池--DBCP浅析.

    前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务 ...

  2. Java数据库连接池--DBCP浅析.

    一. 为何要使用数据库连接池假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪费数据库的资源,并且极易造成数据库服务器内存溢出.拓机.数据库连接是一种关键的有限的昂贵 ...

  3. Java数据库连接池比较(c3p0,dbcp,proxool和BoneCP)

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp21 Java框架数据库连接池比较(c3p0,dbcp和proxool,Bo ...

  4. java常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

  5. java之数据库连接池-dbcp&c3p0&dbutils

    介绍 因为数据库连接对象的创建比较消耗性能,所以可以在应用程序启动时就在内存中开辟一片空间(集合)存放多个数据库连接对象,后面需要连接时直接从该空间中取而不用新创建:使用完毕后归还连接(将连接重新放回 ...

  6. 主流Java数据库连接池分析(C3P0,DBCP,TomcatPool,BoneCP,Druid)

    主流数据库连接池 常用的主流开源数据库连接池有C3P0.DBCP.Tomcat Jdbc Pool.BoneCP.Druid等 C3p0: 开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDB ...

  7. 一个JAVA数据库连接池实现源码

    原文链接:http://www.open-open.com/lib/view/open1410875608164.html // // 一个效果非常不错的JAVA数据库连接池. // from:htt ...

  8. Java数据库连接池的几种配置方法(以MySQL数据库为例)

    Java数据库连接池的几种配置方法(以MySQL数据库为例) 一.Tomcat配置数据源: 前提:需要将连接MySQL数据库驱动jar包放进Tomcat安装目录中common文件夹下的lib目录中 1 ...

  9. 常用数据库连接池 (DBCP、c3p0、Druid) 配置说明

    1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库 ...

随机推荐

  1. html5应用程序标签

    一.html5应用程序标签 (1)datalist需要数据载体 input list属性指向数据源 <input type="text" list="input_l ...

  2. 如何使用Github仓库创建网站

    官方文档:https://help.github.com/categories/github-pages-basics/ 1.创建一个仓库 2.额外建立一个gh-pages分支 3.添加CNAME文件 ...

  3. hdu 2767

    这也是道强连通分量的题: 题目要求我们求出最少需要添加多少条边让整个图变成一个强连通分量: 思路很简单,直接缩点,然后找出所有点中有多少出度为0,入度为0的点,最大的那个就是题目所求: 贴代码: #i ...

  4. 【poj3070】矩阵乘法求斐波那契数列

    [题目描述] 我们知道斐波那契数列0 1 1 2 3 5 8 13…… 数列中的第i位为第i-1位和第i-2位的和(规定第0位为0,第一位为1). 求斐波那契数列中的第n位mod 10000的值. [ ...

  5. SPRING IN ACTION 第4版笔记-第三章ADVANCING WIRING-003-@Conditional根据条件生成bean及处理profile

    一.用@Conditional根据条件决定是否要注入bean 1. package com.habuma.restfun; public class MagicBean { } 2. package ...

  6. 控制台程序使用MFC类的方法

    (unresolved external symbol __endthreadex解决办法) 1.新建控制台程序: 2.添加源代码如下: #include <afx.h> #include ...

  7. NavigationDrawer+Fragment实现侧滑菜单效果

    学习了NavigationDrawer 官方Support包中的SlidingMenu版本,练了下手.用到了ListView中item不同的布局 以后会升级加上ViewPager和GridView实现 ...

  8. oracle的sqlnet.ora , tnsnames.ora , Listener.ora 文件的作用(转)

    oracle网络配置三个配置文件 listener.ora.sqlnet.ora.tnsnames.ora ,都是放在$ORACLE_HOME/network/admin目录下.1. sqlnet.o ...

  9. dom4j修改xml文件

    @SuppressWarnings("unchecked") @Override public void insertCustomInfo(File file, String mo ...

  10. WordPress Bradesco Gateway插件‘falha.php’跨站脚本漏洞

    漏洞名称: WordPress Bradesco Gateway插件‘falha.php’跨站脚本漏洞 CNNVD编号: CNNVD-201309-451 发布时间: 2013-09-26 更新时间: ...