03016_DBCP连接池
1、连接池概述
(1)用池来管理Connection,这样可以重复使用Connection;
(2)有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象;
(3)当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了;
(4)Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池;
(5)常见的连接池:DBCP、C3P0。
2、DBCP连接池
(1)DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池;
(2)下载并导入commons-dbcp-1.4.jar和commons-pool-1.5.6.jar包,下载链接commons-dbcp-1.4.jar和commons-pool-1.5.6.jar 密码:q81g ;
(3)编写工具类
①连接数据库表的工具类, 采用DBCP连接池的方式来完成,Java中提供了一个连接池的规则接口:
DataSource : 它是java中提供的连接池,作为 DriverManager 工具的替代项。在DBCP包中提供了DataSource接口的实现类,我们要用的具体的连接池 BasicDataSource类。
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class JDBCUtils {
public static final String DRIVER = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql://localhost:3306/mybase";
public static final String USERNAME = "root";
public static final String PASSWORD = "root";
/*
* 创建连接池BasicDataSource
*/
public static BasicDataSource dataSource = new BasicDataSource();
// 静态代码块
static {
// 对连接池对象 进行基本的配置
dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
dataSource.setUrl(URL); // 指定要连接的数据库地址
dataSource.setUsername(USERNAME); // 指定要连接数据的用户名
dataSource.setPassword(PASSWORD); // 指定要连接数据的密码
}
/*
* 返回连接池对象
*/
public static DataSource getDataSource() {
return dataSource;
}
}
(4)增
初始数据:

import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner; import org.junit.Test; /*
* 演示使用DBUtils工具 完成数据库表的增删改查
*/
public class Demo {
// 插入功能
@Test
public void insert() {
try {
// 获取一个用来执行SQL语句的对象 QueryRunner
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
String sql = "INSERT INTO Sort(sname) VALUES(?)";
Object[] params = { "遥控器" };
int line = qr.update(sql, params);
// 结果集处理
System.out.println("line = " + line); } catch (SQLException e) {
throw new RuntimeException(e);
}
} }
运行结果:

(5)删
import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test; /*
* 演示使用DBUtils工具 完成数据库表的增删改查
*/
public class Demo {
// 删除功能
@Test
public void delete() {
try {
// 创建一个QueryRunner对象,用来完成SQL语句的执行
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
// 执行SQL语句
String sql = "DELETE FROM Sort WHERE sid = ?";
Object[] params = { 7 };
int line = qr.update(sql, params);
// 结果集的处理
System.out.println("line=" + line); } catch (SQLException e) {
throw new RuntimeException(e);
}
} }
运行结果:

(6)改
import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner;
import org.junit.Test; /*
* 演示使用DBUtils工具 完成数据库表的增删改查
*/
public class Demo {
// 更新功能
@Test
public void update() {
try {
// 创建一个QueryRunner对象,用来完成SQL语句的执行
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
// 执行SQL语句
String sql = "UPDATE Sort SET sid = sid+2 WHERE sname=?";
Object[] params = { "遥控器" };
int line = qr.update(sql, params);
// 结果集的处理
System.out.println("line=" + line); } catch (SQLException e) {
throw new RuntimeException(e);
}
} }
运行结果:

(7)查
import java.sql.SQLException; import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.junit.Test; /*
* 演示使用DBUtils工具 完成数据库表的增删改查
*/
public class Demo {
// 查询功能,将结果集中第一条记录封装到一个指定的javaBean中。
@Test
public void search() {
try {
// 获取QueryRunner
QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
// 执行SQL语句
String sql = "SELECT * FROM sort";
Object[] params = {};
Sort p = qr.query(sql, new BeanHandler<Sort>(Sort.class), params);
// 结果集处理
System.out.println(p); } catch (SQLException e) {
throw new RuntimeException(e);
}
} }
运行结果:

(8)常见配置项

参考文档链接:参考文档
03016_DBCP连接池的更多相关文章
- 连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法
本文出处:http://www.cnblogs.com/wy123/p/6110349.html 之前遇到过这么一种情况: 连接数据库的部分Session会出现不定时的阻塞,这种阻塞时长时短,有时候持 ...
- C3p0连接池配置
在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Connection co ...
- Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池
连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...
- common-pool2 学习:thrift连接池的另一种实现
对象池是一种很实用的技术,经典的例子就是数据库连接池.去年曾经从零开始写过一个thrift客户端连接池.如果不想重造轮子,可以直接在apache开源项目commons-pool的基础上开发. 步骤: ...
- druid连接池获取不到连接的一种情况
数据源一开始配置: jdbc.initialSize=1jdbc.minIdle=1jdbc.maxActive=5 程序运行一段时间后,执行查询抛如下异常: exception=org.mybati ...
- C3P0连接池配置和实现详解
一.配置 <c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> ...
- hibernate+mysql的连接池配置
1:连接池的必知概念 首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...
- 连接池的实现 redis例子
# -*- encoding:utf-8 -*- # import pymysql # # conn = pymysql.connect(host="127.0.0.1", por ...
- DBCP连接池配置示例
<bean id="dataSourceOracle2" class="org.apache.commons.dbcp.BasicDataSource" ...
随机推荐
- 51nod 1102 面积最大的矩形 && 新疆大学OJ 1387: B.HUAWEI's billboard 【单调栈】+【拼凑段】(o(n) 或 o(nlog(n))
题面1:  题面2:  两道题除了数据范围不同,没有任何差异,两道题都可以o(n)(单调栈),o(nlog(n))(我自己的做法)解决. 解题思路1:(单调栈) 对于每个点找到右边第一个比它小的位 ...
- DotNetCore.1.0.1-VS2015Tools.Preview2.0.2 安装错误分析及解决办法(so far)
折腾了这么多天总算弄完了,真恶心.为了让其他童靴避免掉进我遇到的坑里,我决定把最近遇到问题及其解决办法总结一下,希望对大家有帮助. 1.对于2016年7月底以前安装VS用户来说,可能不会那么迫切安装这 ...
- Javascript平稳退化、渐进增强
平稳退化 : javascript平稳退化就是如果一个浏览器完全不支持js或者禁用js的时候,它的基本功能不会受到任何影响.比方说一个网站使用了大量javascript来优化页面,我们现在把浏览器的j ...
- Dapper基础知识二
在下刚毕业工作,之前实习有用到Dapper?这几天新项目想用上Dapper,在下比较菜鸟,这块只是个人对Dapper的一种总结. 2,如何使用Dapper? 首先Dapper是支持多种数据库的 ...
- LCT笔记
先存个代码 #include<iostream> #include<cstring> #include<cstdio> #include<cmath> ...
- [arc076f]Exhausted? - 贪心
题意: 给你m个椅子可以坐人,初始坐标为正整数1~m,有n个人,每个人希望坐的位置$\leq L_i$或者$\geq R_i$,可以添加若干个椅子在任意的实数位置,求最少要添加多少椅子使得所有人都有位 ...
- 紫书 例题8-18 UVa 1442 (扫描法)
从左往右扫描一遍, 得从每个位置往右伸长不会碰到天花板的高度, 右往左一样, 取最小, 然后就是可以放"水"的高度了 #include<cstdio> #include ...
- Unity Microphone 无限时长录制
原创文章:转载请标明出处--博客园 Jason_c Unity可以很方便的通过 Microphone.Start()方法来调用麦克风,但是有一个弊端是,必须传入时长,这就很尴尬了,因为大多数时间,我们 ...
- solr启动时报错org.apache.solr.common.SolrException: undefined field text的解决办法
solr启动时报错org.apache.solr.common.SolrException: undefined field text的解决办法 原创 2015年08月21日 20:47:40 标签: ...
- 洛谷 P1193 洛谷团队训练VS传统团队训练
P1193 洛谷团队训练VS传统团队训练 题目背景 “在中学的信息学教育领域,洛谷无疑是一个相当受欢迎的辅助网站.同时有百余所学校正在通过洛谷进行信息学竞赛(以后简称OI)的教育.洛谷之所以如此受欢迎 ...