连接案例:

首先:我们使用的是mysql数据库,所以要有一个mysql和java的JDBCjar包;

然后是DBCP中的两个jar包,DBCP使用的话,需要两个包:

dbcp.jar和pool.jar。

普通连接:

package dbcp;

import java.sql.Connection;
import java.sql.SQLException; import org.apache.commons.dbcp.BasicDataSource; /**
* dbcp的使用有两个包:
* dbcp核心包 和 pool包
* @author mzy
*
*/
public class Demo01 {
private static String url="jdbc:mysql://localhost:3306/test";
private static String user="root";
private static String password="123456";
private static String driverClass="com.mysql.jdbc.Driver"; public static void main(String[] args) {
// 1) 创建dbcp连接池对象
BasicDataSource bds = new BasicDataSource(); // 2) 设置连接参数
bds.setUrl(url);
bds.setUsername(user);
bds.setPassword(password);
bds.setDriverClassName(driverClass); // 3) 设置连接池参数
bds.setInitialSize(5); // 初始化连接
bds.setMaxActive(10); // 最大连接数
// 如果不调整的话,会一直等待
bds.setMaxWait(3000); // 当超过最大连接时,最大等待时间为3秒 try {
// 从连接池中获取连接
for(int i=0; i<11; i++) {
Connection conn = bds.getConnection();
System.out.println(conn); // 这里得到的Connection是一个代理对象
if(i==3) {
conn.close(); // 这些close其实是把连接放回连接池中
// 注意之前我们讲的代理模式:动态代理
}
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}

通过jdbc.properties中的配置文件进行连接(并设定初始化参数,注意和上面作对比):

jdbc.properties

url=jdbc:mysql://localhost:3306/test
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver initialSize=5
maxActive=12
maxWait=5000
package dbcp;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.util.Properties; import org.apache.commons.dbcp.BasicDataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory; /**
* 通过读properties配置文件进行读写
*
* 读取jdbc.properties文件内容
* dbcp可以自动识别每个配置信息,但是约定前提:
* 配置文件文件的key名称和设置方法的名称保持一致!!!(反射)
* 即javaBean约束:
* 例如setAge --> age 等等
*/
public class Demo02 {
public static void main(String[] args) { try {
// 获取连接
Properties prop = new Properties();
// 使用类路径读取配置文件
InputStream in = Demo02.class.getResourceAsStream("/jdbc.properties");
// 加载配置文件
prop.load(in);
// 1) 使用工厂类来创建dbcp连接池对象(读取配置文件方式)
BasicDataSource bds = (BasicDataSource)BasicDataSourceFactory.createDataSource(prop); //从连接池中获取连接
for(int i=1;i<=13;i++){
Connection conn = bds.getConnection(); //注意: 这里返回的Connection对象,不是原来的Connection,而是代理后的Connection对象
System.out.println(conn); //注意: 使用连接池,记住释放连接
/* if(i==3){
conn.close();// 把连接对象放回连接池中的。连接池中最大能够保存最大连接数的连接对象
}*/
}
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}

初识apache DBCP连接池的更多相关文章

  1. JDBC实例--工具类升级,使用Apache DBCP连接池重构DBUtility,让连接数据库更有效,更安全

    直接使用JDBC访问数据库时,需要避免以下隐患: 1. 每一次数据操作请求都需要建立数据库连接.打开连接.存取数据和关闭连接等步骤.而建立和打开数据库连接是一件既耗资源又费时的过程,如果频繁发生这种数 ...

  2. DBCP连接池简介

    DBCP连接池简介 1.数据库连接基础 数据库连接池基础主要包括以下三个方面的内容:数据库连接池的基本概念.数据库连接池的工作原理.Java开源的连接池.下面将从这三个方面一一介绍: (1)数据库连接 ...

  3. DBCP连接池介绍

    DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...

  4. DBCP连接池原理分析及配置用法

    DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...

  5. JNDI和在tomcat中配置DBCP连接池 元数据的使用 DBUtils框架的使用 多表操作

    1 JNDI和在tomcat中配置DBCP连接池 JNDI(Java Naming and Directory Interface),Java命名和目录接口,它对应于J2SE中的javax.namin ...

  6. 【转】DBCP连接池原理分析

    ---------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 JDBC 3. DB ...

  7. DBCP连接池的使用

    1.新建工程 2.导入commons-dbcp commons-logging commons-pool这三个包 3.创建dbcpconfig.properties的文件 实例如下 #连接设置 dri ...

  8. 使用c3p0与DBCP连接池,造成的MySql 8小时问题解决方案

    转自:http://blog.csdn.net/wangfayinn/article/details/24623575 c3p0数据库连接池mysql8小时 目录(?)[-] 基本问题解决 项目环境 ...

  9. 常见的DBCP连接池配置

    项目中使用mybatis出现一个问题,项目刚启动时,查询项目列表是ok的,过上一段时间之后,再次查询项目列表,查询失败,初步判断是因为mysql的连接问题,最后查阅资料,发现是连接池中的连接失效,导致 ...

随机推荐

  1. React 模块与组件

    React 模块与组件 几个重要概念理解 1). 模块与组件 1. 模块: 理解: 向外提供特定功能的js程序, 一般就是一个js文件 为什么: js代码更多更复杂 作用: 复用js, 简化js的编写 ...

  2. Optional 的使用会导致性能下降吗?

    几天前,我在论坛上发了一篇关于Optional 的文章.其中一条评论是一个非常好的问题: Optional 的使用会导致性能下降吗? 答案是: 是的,它会的.但是你应该担心吗? 使用Optional的 ...

  3. Xshell记录Linux连接操作日志遇到的坑

    1.问题描述: 在Windows上,以前一直使用Secure CRT连接Linux主机进行远程操作,使用CRT的日志功能记录连接过程中的所有操作以及输出. 最近(2019-8-17)使用Xshell进 ...

  4. GIS数据资源下载

    GeoJSON数据下载 1.全国.省.市.县级geojson数据下载 地址:http://datav.aliyun.com/tools/atlas/#&lat=33.5219039961561 ...

  5. Cesium局部区域精细瓦片数据下载技巧

    当Cesium加载局部的目标地区(如中国某个市)的0-18层或更高层数据时,当缩小到zoom较小时可能地球有部分区域(如南半球或左半球)无瓦片覆盖. 为使得整个地球有瓦片覆盖,可利用以下技巧下载瓦片: ...

  6. 七个对我最重要的职业建议)--转载来自ruanyifeng博客

    原文:http://www.ruanyifeng.com/blog/2015/09/career-advice.html 一.不要别人点什么,就做什么 我的第一份工作,只干了8个月,那家公司就倒闭了. ...

  7. 解决Docker安装慢

    之前介绍了Ubuntu安装Docker教程,在实际安装过程中,可能受限于国内网络问题,安装缓存或者失败.下面介绍一种通过国内镜像方式,仅需要执行一段脚本即可大幅度提升Docker的安装速度. Linu ...

  8. (Opencv07)绘制边框

    (Opencv07)绘制边框 cv2.boundingRect(img) 这个函数可以获得一个图像的最小矩形边框一些信息 cv2.rectangle()可以画出该最小矩形边框 x, y ,w, h = ...

  9. Oracle 分页查询的一个实例

    1.分页模板 select * from ( select rownum as rn , a.* from( 某个表名) a) where rn between 0 and 6 2 某个表名 sele ...

  10. webSocket实现多人聊天功能

    webSocket实现多人在线聊天 主要思路如下: 1.使用vue构建简单的聊天室界面 2.基于nodeJs 的webSocket开启一个socket后台服务,前端使用H5的webSocket来创建一 ...