本文着重理解DBCP以及连接池基本运行原理(步骤)
首先我们要知道在连接数据库时
如果频繁的对数据库进行连接,然后又将它释放,对项目的访问效率是一种绝对的降低,

因为在这个过程中,连接(校验密码用户名)·与释放(回收资源)需要1s左右,一旦许多action一起访问,势必对服务器有不小压力

于是乎,数据库连接池就出现了,
常见的两种种为:
1.C3P0 数据库连接池(可百度咨询)
 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0数据源在项目开发中使用得比较多。
 c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能

2.DBCP 数据库连接池(本文着重理解DBCP)
 DBCP 是 Apache 软件基金组织下的开源连接池实现,要使用DBCP数据源,需要应用程序应在系统中增加如下两个 jar 文件:
Commons-dbcp.jar:连接池的实现
Commons-pool.jar:连接池实现的依赖库

  Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

本文着重理解DBCP

连接池基本运行步骤
(1) 程序初始化时创建一定数量(initialSize)连接池
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源

但我们将使用已经封装好的 DBCP连接池

首先导入包:
Commons-dbcp.jar:连接池的实现
Commons-pool.jar:连接池实现的依赖库

好,开始使用,
使用步骤如下:
1.配置自定义资源文件
config.properties
2.编写一个类调用Commons-dbcp.jar,连接池的实现

config.properties配置:(具体参数具体修改)
可以定义多个资源文件,并以此加载不同数据库链接
(重点:资源文件位于src目录!!!!!!!!!)

#连接设置
**driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/userxiu
username=root
password=123456**
#<!-- 初始化连接 -->
initialSize=5
#最大连接数量
maxActive=70
#<!-- 最大空闲连接 -->
maxIdle=50
#<!-- 最小空闲连接 -->
minIdle=2
#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
maxWait=60000
#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=UTF8
#指定由连接池所创建的连接的自动提交(auto-commit)状态。
defaultAutoCommit=true
#driver default 指定由连接池所创建的连接的只读(read-only)状态。
#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix)
defaultReadOnly=false
#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。
#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE
defaultTransactionIsolation=READ_UNCOMMITTED

编写一个类调用Commons-dbcp.jar,连接池的实现

package com.dbcp;import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
/*** dbcp数据库连接池  工具类* 优点:不重复连接数据库等* https://www.cnblogs.com/xdp-gacl/p/4002804.html*/
/**
* @ClassName: Jdbc_DBCP
* @author joker
*/
public class Jdbc_DBCP {/*** 在java中,编写数据库连接池需实现java.sql.DataSource接口,每一种数据库连接池都是DataSource接口的实现* DBCP连接池就是java.sql.DataSource接口的一个具体实现*/// 声明一个BasicDataSource源,也就是驱动private static BasicDataSource ds = null;//在静态代码块中创建数据库连接池static{try {//加载properties配置文件InputStream in = Jdbc_DBCP.class.getClassLoader().getResourceAsStream("config.properties");Properties prop = new Properties();prop.load(in);//创建数据源ds = (BasicDataSource) BasicDataSourceFactory.createDataSource(prop);} catch (IOException e) {// TODO 自动生成的 catch 块e.printStackTrace();} catch (Exception e) {// TODO 自动生成的 catch 块e.printStackTrace();}}/*** @Description: 从数据源中获取数据库连接* @Anthor:joker* @return Connection* @throws SQLException*/ public static Connection getConnection() throws SQLException{//从数据源中获取数据库连接return ds.getConnection();}/*** @Method: release* @Description: 释放资源,* 释放资源* @Anthor:joker** @param conn* @param st* @param rs*/ public static void release(Connection conn,Statement st,ResultSet rs){if(rs!=null){try{//关闭存储查询结果的ResultSet对象rs.close();}catch (Exception e) {e.printStackTrace();}rs = null;}if(st!=null){try{//关闭负责执行SQL命令的Statement对象st.close();}catch (Exception e) {e.printStackTrace();}}if(conn!=null){try{//将Connection连接对象还给数据库连接池conn.close();}catch (Exception e) {e.printStackTrace();}}}
}

剩余的就是调用了(关键代码)

         Connection co = Jdbc_DBCP.getConnection();PreparedStatement p = co.prepareStatement(sql);ResultSet result = p.executeQuery();Jdbc_DBCP.release(co, p,result);

这就是数据库连接池优点。
它用完了,关闭时会只关闭逻辑连接,位于服务器的物理连接仍然存在。(为什么,导入的包实现的功能,只要会用,当然可以写,附上编写关键实现)

连接池需实现java.sql.DataSource接口。DataSource接口中定义了两个重载的getConnection方法:

Connection getConnection()
Connection getConnection(String username, String password)

当用户使用完Connection,
调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。
Collection保证将自己返回到LinkedList中是编程的难点。

javaweb使用 数据库连接池 DBCP,实现对数据库驱动使用优化,多个 action共用一个数据库连接相关推荐

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

    转载自  常用数据库连接池 (DBCP.c3p0.Druid) 配置说明 1. 引言 1.1 定义 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的 ...

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

    转载自   Java数据库连接池--DBCP浅析 前言对于数据库连接池, 想必大家都已经不再陌生, 这里仅仅设计Java中的两个常用数据库连接池: DBCP和C3P0(后续会更新). 一. 为何要使用 ...

  3. mysql dbcp 配置文件_数据库连接池DBCP使用方式

    数据库连接池DBCP使用方式 概念 开源数据源实现,使用这些数据库连接池后,我们在项目开发中就不需要编写连接数据库的代码了. 开源数据源包含DBCP.C3P0.Druid等 DBCP Java使用实例 ...

  4. 数据库连接池 DBCP和c3p0数据库连接池

    一.数据库连接池 1. 什么是连接池 传统的开发模式下,Servlet处理用户的请求,找Dao查询数据,dao会创建与数据库之间的连接,完成数据查询后会关闭数据库的链接. 这样的方式会导致用户每次请求 ...

  5. 数据库连接池 (DBCP、c3p0、Druid) 配置说明和对比

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

  6. 01_数据库连接池,数据源,ResultSetMetaData,jdbc优化

     一.数据库连接池 1. 什么是连接池 传统的开发模式下,Servlet处理用户的请求,找Dao查询数据,dao会创建与数据库之间的连接,完成数据查询后会关闭数据库的链接. 这样的方式会导致用户每 ...

  7. 针对数据库连接池到DRDS连接探活的优化

    简介: 针对数据库连接池到DRDS连接探活的优化 1. 问题背景 近期在给某专有云客户进⾏云产品应⽤性能优化分析时,发现了⼀个有趣的关于DRDS使⽤层⾯的问题,这⾥给⼤家分享⼀下. 使⽤过DRDS产品 ...

  8. JavaWeb基础—数据库连接池DBCP、C3P0

    一.基本概念 数据库连接池负责分配.管理和释放数据库连接 数据库连接池:(池用map来实现居多) 用处:为了可重用(销毁创建麻烦,开销大)(招培训老师的例子) 二.编写实现数据库连接池 池参数: 初识 ...

  9. javaweb mysql 连接池 c3p0 配置_JavaWeb基础—数据库连接池DBCP、C3P0

    一.基本概念 数据库连接池负责分配.管理和释放数据库连接 数据库连接池:(池用map来实现居多) 用处:为了可重用(销毁创建麻烦,开销大)(招培训老师的例子) 二.编写实现数据库连接池 池参数: 初识 ...

最新文章

  1. 第四次作业---四则运算升级版(带可视化界面)
  2. java 小波去噪原理_小波去噪的基本知识
  3. Python logging动态调整日志等级
  4. [补档]暑假集训D5总结
  5. 中国的四大沙地,你都认识吗?
  6. 四、纤维素纤维使用P-N系阻燃剂协同作用的原理?
  7. Linux ftp 命令
  8. Repeater控件绑定数据、分页、数据操作,最佳代码
  9. html+css+js实现科学计算器
  10. Python爬虫时中文乱码的处理
  11. SAP CRM Transaction处理中的权限控制
  12. 实战Nginx与Perl、Java的安装与配置
  13. javascript 阮一峰入门教程
  14. 小学计算机片段教学案例,小学信息技术教学案例分析(张擘)
  15. 本周工作心得系列(5)
  16. (高小德用车)高仿滴滴/快的应用源码
  17. 什么是Java垃圾回收器
  18. MindManager2022激活码序列号密钥怎么注册教程下载介绍教程
  19. java中复数_Java中的复数
  20. 实现你人生中的第一个jQuery插件

热门文章

  1. 2018 前端面试题(不定期更新)
  2. linux命令(8)wc
  3. Uva 1220,Hali-Bula 的晚会
  4. 4.编程打印一个二维数组中所有元素的和,并打印最大值,最小值(以及它们所在的行号和列号)
  5. [python学习] 专题七.网络编程之套接字Socket、TCP和UDP通信实例
  6. LeetCode Algorithm 129. 求根节点到叶节点数字之和
  7. 使用pytz模块进行时区转换及时间计算
  8. 第13章 Django框架
  9. ALGO-1 区间k大数查询
  10. 征战蓝桥 —— 2014年第五届 —— C/C++A组第3题——神奇算式