依赖

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>yofc</groupId>
<artifactId>jdbc</artifactId>
<version>1.0-SNAPSHOT</version> <dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.4.0</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.6.0</version>
</dependency>
</dependencies> <build>
<plugins>
<!-- 指定jdk -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

获取连接,三种方式

1、BasicDataSource

import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.commons.dbcp2.BasicDataSourceFactory;
import org.junit.jupiter.api.Test; import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties; public class DBCPTest {
@Test
public void testDBCP() throws SQLException {
BasicDataSource dataSource = new BasicDataSource(); // 设置必须属性
dataSource.setUsername("root");
dataSource.setPassword("root");
dataSource.setUrl("jdbc:mysql://192.168.8.136:3306/jdbc");
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver"); // 设置可选属性 // 指定数据库连接池中初始化连接数的个数
dataSource.setInitialSize(5);
// 指定最大的连接数: 同一时刻可以同时向数据库申请的连接数
dataSource.setMaxTotal(5);
// 指定小连接数: 在数据库连接池中保存的最少的空闲连接的数量
dataSource.setMinIdle(2);
// 等待数据库连接池分配连接的最长时间. 单位为毫秒. 超出该时间将抛出异常.
dataSource.setMaxWaitMillis(1000 * 5); // 从数据源中获取数据库连接
Connection connection = dataSource.getConnection();
System.out.println(connection);
connection.close(); printDataSourceStats(dataSource);
shutdownDataSource(dataSource);
} private static void printDataSourceStats(DataSource ds) {
BasicDataSource bds = (BasicDataSource) ds;
System.out.println("NumActive: " + bds.getNumActive());
System.out.println("NumIdle: " + bds.getNumIdle());
} private static void shutdownDataSource(DataSource ds) throws SQLException {
BasicDataSource bds = (BasicDataSource) ds;
bds.close();
}
}

配置文件方式

dbcp.properties

username=root
password=root
url=jdbc:mysql://192.168.8.136:3306/jdbc
driverClassName=com.mysql.cj.jdbc.Driver initialSize=10
maxTotal=50
minIdle=5
maxWaitMillis=5000
@Test
public void testDBCPWithConfig() throws Exception {
InputStream inStream = this.getClass().getClassLoader().getResourceAsStream("dbcp.properties");
Properties properties = new Properties();
properties.load(inStream);
BasicDataSource dataSource = BasicDataSourceFactory.createDataSource(properties); // 从数据源中获取数据库连接
System.out.println(dataSource.getConnection()); printDataSourceStats(dataSource);
shutdownDataSource(dataSource);
}

2、PoolingDataSource

import org.apache.commons.dbcp2.*;
import org.apache.commons.pool2.ObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPool; import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class PoolingDataSourceExample {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rset = null; try {
Class.forName("com.mysql.cj.jdbc.Driver");
DataSource dataSource = setupDataSource("jdbc:mysql://192.168.8.136:3306/jdbc"); conn = dataSource.getConnection();
stmt = conn.createStatement();
rset = stmt.executeQuery("select * from user");
int numcols = rset.getMetaData().getColumnCount();
while (rset.next()) {
for (int i = 1; i <= numcols; i++) {
System.out.print("\t" + rset.getString(i));
}
System.out.println("");
}
} catch (SQLException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rset != null) rset.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
}
}
} public static DataSource setupDataSource(String connectURI) {
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI, "root", "root");
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null);
ObjectPool<PoolableConnection> connectionPool = new GenericObjectPool<>(poolableConnectionFactory);
poolableConnectionFactory.setPool(connectionPool); PoolingDataSource<PoolableConnection> dataSource = new PoolingDataSource<>(connectionPool);
return dataSource;
}
}

3、PoolingDriver

import org.apache.commons.dbcp2.*;
import org.apache.commons.pool2.ObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPool; import java.sql.*; public class PoolingDriverExample {
public static void main(String[] args) {
Connection conn = null;
Statement stmt = null;
ResultSet rset = null; try {
Class.forName("com.mysql.cj.jdbc.Driver");
setupDriver("jdbc:mysql://192.168.8.136:3306/jdbc");
conn = DriverManager.getConnection("jdbc:apache:commons:dbcp:example");
stmt = conn.createStatement();
rset = stmt.executeQuery("select * from user");
int numcols = rset.getMetaData().getColumnCount();
while (rset.next()) {
for (int i = 1; i <= numcols; i++) {
System.out.print("\t" + rset.getString(i));
}
System.out.println("");
}
printDriverStats();
shutdownDriver();
} catch (SQLException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (rset != null) rset.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (Exception e) {
}
}
} public static void setupDriver(String connectURI) throws Exception {
ConnectionFactory connectionFactory = new DriverManagerConnectionFactory(connectURI, "root", "root");
PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, null);
ObjectPool<PoolableConnection> connectionPool = new GenericObjectPool<>(poolableConnectionFactory);
poolableConnectionFactory.setPool(connectionPool); Class.forName("org.apache.commons.dbcp2.PoolingDriver");
PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");
driver.registerPool("example", connectionPool);
} public static void printDriverStats() throws Exception {
PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");
ObjectPool<? extends Connection> connectionPool = driver.getConnectionPool("example");
System.out.println("NumActive: " + connectionPool.getNumActive());
System.out.println("NumIdle: " + connectionPool.getNumIdle());
} public static void shutdownDriver() throws Exception {
PoolingDriver driver = (PoolingDriver) DriverManager.getDriver("jdbc:apache:commons:dbcp:");
driver.closePool("example");
}
}

官方文档

http://www.cnblogs.com/wang-meng/p/5463020.html

JDBC-DBCP的更多相关文章

  1. java jdbc dbcp连接SQL Server

    使用到的jar: commons-collections-3.1.jar commons-dbcp-1.4.jar commons-pool-1.5.6.jar sqljdbc4.jar dbcp配置 ...

  2. c3p0;jdbc;dbcp;mybatis;ubutils;

    [说明]今天还是完成了一定东西的,上午是jdbc的测试,下午是 数据库连接池 和 dbutils 的测试,晚上是mybatis的测试,都是找了一些网上的例子运行了一下,解决出现的问题. 一:今日完成 ...

  3. initialSize,maxTotal,maxIdle,minIdle,maxWaitMillis

    初始化连接数:默认值 0 同一时刻可分配最大连接数:默认值 8 ,设置为负数时不做限制 最大空闲连接,默认值 8 ,超出连接将被释放 最小空闲连接数,默认值 0 请求连接最大等待时间(毫秒),默认值 ...

  4. SSH登录与增删改查demo详解+源代码

    点击下载,测试绝对可用SSH整合框架登录加增删改查demo 下载地址:http://download.csdn.net/detail/qq_33599520/9784679   一.框架概述 spri ...

  5. ssm+redis整合(通过cache方式)

    这几天的研究ssm redis 终于进入主题了,今天参考了网上一些文章搭建了一下ssm+redis整合,特别记录下来以便以后可以查询使用,有什么不足请大牛们提点 项目架构 1.pom.xml < ...

  6. ssm 整合(方案二 maven)

    通过maven来整合ssm方便很多,至少不用去找jar包 具体架构如下: 1.配置pom.xml <project xmlns="http://maven.apache.org/POM ...

  7. ssm整合(方案一 引入jar)

    最近为了研究redis整合,基本都是ssm+redis 好吧 我是老古董了,以前都是ssi,那就折腾一下ssm先,具体方案: 方案一:基本引入jar版.方案二:maven版(后续继续整) 这篇主要是通 ...

  8. SSM项目的数据库密码加密方案

    项目主要采用:SpringMVC4.3.2.RELEASE +Spring4.3.2.RELEASE + Maven 3.3.3 + druid 1.0.29 + Mybatis 3.2.8 + My ...

  9. 杂谈spring、springMVC

    一.背景 目前项目组都在用SSM(spring+springMVC+mybatis)开发项目 大家基本都停留在框架的基本使用阶段,对框架的职责并不清晰,导致配置文件出现了不少问题 在这简单讲解一下sp ...

  10. Eclipse+Tomcat7.0+MySQL 连接池设置

    http://blog.sina.com.cn/s/blog_85d71fb70101ab99.html 工程名:JavaWeb 第一步:配置server.xml 在Tomcat的server.xml ...

随机推荐

  1. linux常用命令(个人总结)

    1.快捷键: ctrl + l           --------------------清屏 ctrl + c          --------------------退出当前命令 ctrl + ...

  2. 【XSY2745】装饰地板 状压DP 特征多项式

    题目大意 你有\(s_1\)种\(1\times 2\)的地砖,\(s_2\)种\(2\times 1\)的地砖. 记铺满\(m\times n\)的地板的方案数为\(f(m,n)\). 给你\(m, ...

  3. groovy的效率问题

    刚开始学groovy,知道了它会先变异成class 文件,然后再用jvm 执行.写了Hello World程序,查看它的编译文件,发现groovy的效率挺低的.不但编译文件的代码多,而且需要依赖很多g ...

  4. requirejs 使用实例r.js打包

    在这里,请先看基础文章与相关技术文档: 安装: npm init npm install requirejs --save npm install jquery@1.11.1 --save 创建基本目 ...

  5. 洛谷P1829 [国家集训队]Crash的数字表格

    题目描述 今天的数学课上,Crash小朋友学习了最小公倍数(Least Common Multiple).对于两个正整数a和b,LCM(a, b)表示能同时整除a和b的最小正整数.例如,LCM(6, ...

  6. thinkphp5 上传服务器后 Access denied

    服务器报 Access denied,要么报 No input files,但是在网上查了查说是将 PHP 的cgi.fix_pathinfo 改成 1 即可,但是改成 1 显然是有解析漏洞的,尝试寻 ...

  7. C语言中的类型转换——将字符串s转换为整数型(int)类型

    在讲类型转换之前,我们先要理解下C语言中单引号和双引号的区别. 先讲双引号,双引号就是字符串,我们要证实我们的想法,我选择写一段代码看看开: #include <stdio.h> int ...

  8. hihocoder--1384 -- Genius ACM (倍增 归并)

    题目链接 1384 -- Genius ACM 给定一个整数 m,对于任意一个整数集合 S,定义“校验值”如下:从集合 S 中取出 m 对数(即 2*M 个数,不能重复使用集合中的数,如果 S 中的整 ...

  9. Servlet -- 重定向

    重定向的两种方式: 1: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws S ...

  10. 用go语言实现线程池

    代码放在 https://github.com/bigben0123/workerPool 安装完go软件后.执行目录中的install.cmd即可.