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类。

  1. import javax.sql.DataSource;
  2.  
  3. import org.apache.commons.dbcp.BasicDataSource;
  4.  
  5. public class JDBCUtils {
  6. public static final String DRIVER = "com.mysql.jdbc.Driver";
  7. public static final String URL = "jdbc:mysql://localhost:3306/mybase";
  8. public static final String USERNAME = "root";
  9. public static final String PASSWORD = "root";
  10. /*
  11. * 创建连接池BasicDataSource
  12. */
  13. public static BasicDataSource dataSource = new BasicDataSource();
  14. // 静态代码块
  15. static {
  16. // 对连接池对象 进行基本的配置
  17. dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动
  18. dataSource.setUrl(URL); // 指定要连接的数据库地址
  19. dataSource.setUsername(USERNAME); // 指定要连接数据的用户名
  20. dataSource.setPassword(PASSWORD); // 指定要连接数据的密码
  21. }
  22.  
  23. /*
  24. * 返回连接池对象
  25. */
  26. public static DataSource getDataSource() {
  27. return dataSource;
  28. }
  29. }

  (4)增

  初始数据:

  

  1. import java.sql.SQLException;
  2.  
  3. import org.apache.commons.dbutils.QueryRunner; import org.junit.Test;
  4.  
  5. /*
  6. * 演示使用DBUtils工具 完成数据库表的增删改查
  7. */
  8. public class Demo {
  9. // 插入功能
  10. @Test
  11. public void insert() {
  12. try {
  13. // 获取一个用来执行SQL语句的对象 QueryRunner
  14. QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
  15. String sql = "INSERT INTO Sort(sname) VALUES(?)";
  16. Object[] params = { "遥控器" };
  17. int line = qr.update(sql, params);
  18. // 结果集处理
  19. System.out.println("line = " + line);
  20.  
  21. } catch (SQLException e) {
  22. throw new RuntimeException(e);
  23. }
  24. }
  25.  
  26. }

  运行结果:

  

  (5)删

  1. import java.sql.SQLException;
  2.  
  3. import org.apache.commons.dbutils.QueryRunner;
  4. import org.junit.Test;
  5.  
  6. /*
  7. * 演示使用DBUtils工具 完成数据库表的增删改查
  8. */
  9. public class Demo {
  10. // 删除功能
  11. @Test
  12. public void delete() {
  13. try {
  14. // 创建一个QueryRunner对象,用来完成SQL语句的执行
  15. QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
  16. // 执行SQL语句
  17. String sql = "DELETE FROM Sort WHERE sid = ?";
  18. Object[] params = { 7 };
  19. int line = qr.update(sql, params);
  20. // 结果集的处理
  21. System.out.println("line=" + line);
  22.  
  23. } catch (SQLException e) {
  24. throw new RuntimeException(e);
  25. }
  26. }
  27.  
  28. }

  运行结果:
  

  (6)改

  1. import java.sql.SQLException;
  2.  
  3. import org.apache.commons.dbutils.QueryRunner;
  4. import org.junit.Test;
  5.  
  6. /*
  7. * 演示使用DBUtils工具 完成数据库表的增删改查
  8. */
  9. public class Demo {
  10. // 更新功能
  11. @Test
  12. public void update() {
  13. try {
  14. // 创建一个QueryRunner对象,用来完成SQL语句的执行
  15. QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
  16. // 执行SQL语句
  17. String sql = "UPDATE Sort SET sid = sid+2 WHERE sname=?";
  18. Object[] params = { "遥控器" };
  19. int line = qr.update(sql, params);
  20. // 结果集的处理
  21. System.out.println("line=" + line);
  22.  
  23. } catch (SQLException e) {
  24. throw new RuntimeException(e);
  25. }
  26. }
  27.  
  28. }

  运行结果:

  

  (7)查

  1. import java.sql.SQLException;
  2.  
  3. import org.apache.commons.dbutils.QueryRunner;
  4. import org.apache.commons.dbutils.handlers.BeanHandler;
  5. import org.junit.Test;
  6.  
  7. /*
  8. * 演示使用DBUtils工具 完成数据库表的增删改查
  9. */
  10. public class Demo {
  11. // 查询功能,将结果集中第一条记录封装到一个指定的javaBean中。
  12. @Test
  13. public void search() {
  14. try {
  15. // 获取QueryRunner
  16. QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
  17. // 执行SQL语句
  18. String sql = "SELECT * FROM sort";
  19. Object[] params = {};
  20. Sort p = qr.query(sql, new BeanHandler<Sort>(Sort.class), params);
  21. // 结果集处理
  22. System.out.println(p);
  23.  
  24. } catch (SQLException e) {
  25. throw new RuntimeException(e);
  26. }
  27. }
  28.  
  29. }

  运行结果:

  

  (8)常见配置项

  

  参考文档链接:参考文档

03016_DBCP连接池的更多相关文章

  1. 连接SQLServer时,因启用连接池导致孤立事务的原因分析和解决办法

    本文出处:http://www.cnblogs.com/wy123/p/6110349.html 之前遇到过这么一种情况: 连接数据库的部分Session会出现不定时的阻塞,这种阻塞时长时短,有时候持 ...

  2. C3p0连接池配置

    在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");)   ②连接数据库(Connection co ...

  3. Java第三方数据库连接池库-DBCP-C3P0-Tomcat内置连接池

    连接池原理 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”.预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去.我们可以通过设定连接池 ...

  4. common-pool2 学习:thrift连接池的另一种实现

    对象池是一种很实用的技术,经典的例子就是数据库连接池.去年曾经从零开始写过一个thrift客户端连接池.如果不想重造轮子,可以直接在apache开源项目commons-pool的基础上开发. 步骤: ...

  5. druid连接池获取不到连接的一种情况

    数据源一开始配置: jdbc.initialSize=1jdbc.minIdle=1jdbc.maxActive=5 程序运行一段时间后,执行查询抛如下异常: exception=org.mybati ...

  6. C3P0连接池配置和实现详解

    一.配置 <c3p0-config> <default-config> <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数.Default: 3 --> ...

  7. hibernate+mysql的连接池配置

    1:连接池的必知概念    首先,我们还是老套的讲讲连接池的基本概念,概念理解清楚了,我们也知道后面是怎么回事了. 以前我们程序连接数据库的时候,每一次连接数据库都要一个连接,用完后再释放.如果频繁的 ...

  8. 连接池的实现 redis例子

    # -*- encoding:utf-8 -*- # import pymysql # # conn = pymysql.connect(host="127.0.0.1", por ...

  9. DBCP连接池配置示例

    <bean id="dataSourceOracle2" class="org.apache.commons.dbcp.BasicDataSource" ...

随机推荐

  1. (转载) 据说年薪30万的Android程序员必须知道的

    据说年薪30万的Android程序员必须知道的帖子 标签: android 2015-03-12 16:52 28705人阅读 评论(14) 收藏 举报 Android中国开发精英 目前包括: And ...

  2. 003.JMS概述

    1. 基本概念 JMS:Java Message Service, Java消息服务,是Java EE中的一个技术. JMS规范:JMS定义了Java中访问消息中间件的接口,并没有给予实现,实现JMS ...

  3. 51nod 1021 石子归并 (动态规划 简单代码)

    题目: 思路:动态规划,递推式子 dp[i][j] = min(dp[i][j], dp[i][k] + dp[k+1][j] + sum[j] - sum[i-1]);     dp[i][j]表示 ...

  4. Maven配置文件中配置指定JDK版本

    1. 在setting.xml文件中的<profiles>标签加入如下配置: <profile> <id>jdk-1.8</id> <activa ...

  5. 3ds max打造诱人三维水果教程:鸭梨_3dmax教程

    本系列我们介绍用3DsMAX打造美味诱人水果的实例,入门者可以按照步骤学习简单的造型和材质设定.之前我们介绍了苹果和桔子的绘制方法,今天我们介绍的主角是——鸭梨. 进入“创建”命令面板.选择“图形”按 ...

  6. [转载]PyCharm创建.py自动添加文件头注释

    转自:https://blog.csdn.net/qq_36482772/article/details/67218214 创建.py文件时 顺便自动添加作者.时间.文件名信息…… mac系统打开编辑 ...

  7. HDU-1358 Period 字符串问题 KMP算法 求最小循环节

    题目链接:https://cn.vjudge.net/problem/HDU-1358 题意 给一个字符串,对下标大于2的元素,问有几个最小循环节 思路 对每个元素求一下minloop,模一下就好 提 ...

  8. 学习《PythonWeb开发实战(董伟明)》中文PDF+源代码

    python可以用了进行数据分析,也可以进行Web开发,一般会使用django或者flask等进行开发. 国内介绍python web的书有写的不错的,推荐看看<PythonWeb开发实战> ...

  9. sqlmap 实战漏洞平台dvwa进行密码破解

    2016-05-24 (1)实验的具体的环境极其思路 首先我们要检测我们的漏洞平台是否有sql注入 ,进行简单的测试发现在用户userid 上存在注入的漏洞 使用抓包工具对其cookie 进行获取如下 ...

  10. 2015 Multi-University Training Contest 3 hdu 5316 Magician

    Magician Time Limit: 18000/9000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total S ...