一、什么是数据库连接池

为了避免频繁的创建数据库连接,数据库连接池技术应运而生。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立。

二、DataSource接口

为了获取数据库连接对象(Connection),JDBC提供了javax.sql.DataSource接口,它负责与数据库建立连接,并定义了获取Connection对象的方法,具体如下:

Connection getConnection()

Connection getConnection(String username, String password)

三、DBCP数据源

DBCP是数据库连接池(DataBase Connection Pool)的简称,是Apache组织下的开源连接池实现,也是Tomcat服务器使用的连接池组件。单独使用DBCP数据源时,需要在应用程序中导入两个JAR包,具体如下。

commons-dbcp.jar包

commons-pool.jar包

下载地址:Index of /proper

下载高版本的jar包时,mysql驱动也要高版本的

四、c3p0

C3P0是目前最流行的开源数据库连接池之一,它实现了DataSource数据源接口,支持JDBC2和JDBC3的标准规范,易于扩展并且性能优越,著名的开源框架Hibernate和 Spring都支持该数据源。在使用C3P0数据源开发时,需要了解C3P0中DataSource接口的实现类ComboPooledDataSource,它是C3P0的核心类,提供了数据源对象的相关方法,该类的常用方法介绍如下表所示。

当使用c3p0数据源时,首先要导入c3p0的jar包,然后创建数据源对象。有两种方法:

4.1.new ComboPooledDataSource()

public class Example03 {public static DataSource ds = null;// 初始化C3P0数据源static {ComboPooledDataSource cpds = new ComboPooledDataSource();// 设置连接数据库需要的配置信息try {cpds.setDriverClass("com.mysql.jdbc.Driver");cpds.setJdbcUrl("jdbc:mysql://localhost:3306/jdbc");cpds.setUser("root");cpds.setPassword("root");// 设置连接池的参数cpds.setInitialPoolSize(5);cpds.setMaxPoolSize(15);ds = cpds;} catch (Exception e) {throw new ExceptionInInitializerError(e);}}public static void main(String[] args) throws SQLException {// 获取数据库连接对象System.out.println(ds.getConnection());}
}

4.2.通过读取配置文件创建数据源对象

创建配置文件c3p0-config.xml或者c3p0.properties

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property><property name="user">root</property><property name="password">root</property><property name="checkoutTimeout">30000</property><property name="initialPoolSize">10</property><property name="maxIdleTime">30</property><property name="maxPoolSize">100</property><property name="minPoolSize">10</property><property name="maxStatements">200</property></default-config> <named-config name="itcast"><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbc</property><property name="user">root</property><property name="password">root</property><property name="initialPoolSize">5</property><property name="maxPoolSize">15</property></named-config>
</c3p0-config>

创建类

public class Example04 {public static DataSource ds = null;// 初始化C3P0数据源static {// 使用c3p0-config.xml配置文件中的named-config节点中name属性的值ComboPooledDataSource cpds = new ComboPooledDataSource("itcast");ds = cpds;}public static void main(String[] args) throws SQLException {System.out.println(ds.getConnection());}}

10-1-数据库连接池相关推荐

  1. c3p0数据库连接池的使用详解

    首先,什么是c3p0?下面是百度百科的解释: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Sp ...

  2. JDBC(11)—数据库连接池

    在实际开发过程中,特别是在web应用系统中,如果程序直接访问数据库中的数据,每一次数据访问请求丢必须经历建立数据库连接.打开数据库.存取数据和关闭数据库连接.而连接并打开数据库是一件既消费资源又费时的 ...

  3. Java基础之数据库连接池

    目录 概念 何为池? 为何使用数据库连接池? Java中几个开源的数据库连接池 C3P0数据库连接池 DBCP数据库连接池 Druid数据库连接池 概念 何为池? 池(Pool)技术在一定程度上可以明 ...

  4. C3PO数据库连接池

    一.数据库连接池原理 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象. 使用完毕后,用 ...

  5. Flask入门(10):数据库连接池

    目录 10.数据库连接池 模式一 模式二 示例:使用数据库连接池进行登录验证 10.数据库连接池 参考:https://www.cnblogs.com/wangkun122/articles/8992 ...

  6. Druid数据库连接池超时问题com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10

    问题描述: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 1000, active 10at com.alibab ...

  7. Druid数据库连接池使用参考

    一:添加相应依赖 druid-1.0.9.jar: mysql-connector-java-5.1.48-bin.jar 二:编写properties文件 放置位置在src中: driverClas ...

  8. mysql连接池为何不用nio_为什么要用数据库连接池?

    1.为什么要用数据库连接池? 最原始的数据库使用就是打开一个连接并进行使用,使用过后一定要关闭连接释放资源.由于频繁的打开和关闭连接对jvm包括数据库 都有一定的资源负荷,尤其应用压力较大时资源占用比 ...

  9. 数据库连接池,实现及分析

    在我们日常对数据库操作时存在一个问题,要为每次数据操作请求建立一个数据库连接.而每次建立连接都需要花费很多开销,如加载驱动类.注册驱动.获取连接,这样如果在短时间内连接多次,就 会耗费多余的时间(加载 ...

  10. swoole实现数据库连接池

    2019独角兽企业重金招聘Python工程师标准>>> 原生 PHP CURD 让我们来回顾一下PHP中数据库的使用 <?php # curd.php$id = 1;$dbh ...

最新文章

  1. linux paste变量,Linux paste命令详解
  2. 5G时代来临,高通如何让AI触手可及?
  3. Android程序label居中
  4. Linux如何查找大文件或目录总结
  5. 日元兑换——国内兑换需要护照和签证,国外的机场有兑换ATM
  6. HashMap 源码详细分析(JDK1.8)
  7. Go 语言的%d,%p,%v等占位符的使用
  8. 关于VS2012连接MySql数据库时无法选择数据源
  9. 阿里云DLA新功能来袭 查询MongoDB嵌套字段更方便
  10. 浅学习使用Ribbon 和 Feign的理解和使用
  11. qqbot python_Python3.6 QQBot 机器人 - 注册响应函数
  12. 医疗中的ai_医疗保健中自主AI的障碍
  13. pip-script.py‘ is not present Verifying transaction: failed
  14. AudioTrack音频播放
  15. [FPGA入门笔记](十):按键消抖实验
  16. 骁龙855+4800万像素+五大配件,魅族16s开售
  17. 输入年龄,判断年龄阶段
  18. 800套绝美PPT模板免费下载
  19. 例5.8求Fibonacci(斐波那契)数列的前40个数。
  20. cad自动填写页码lisp,CAD图纸页码的自动生成-农夫也玩CAD

热门文章

  1. Day9 深度学习入门
  2. contes 7.6安装后网络问题解决方案
  3. 【算法】剑指 Offer 58 - I. 翻转单词顺序
  4. 【Flink】Flink KeyGroupRange {startKeyGroup=7,endKeyGroup=12} does not contain key group 45
  5. 【Elasticsearch】腾讯万亿级 Elasticsearch 内存效率提升解密 源码级别 性能优化
  6. 【hortonworks/registry】registry 如何创建 互相依赖的 schema
  7. Spark 2.2 Core :TimSort 的原理与源码分析
  8. navicat安装指南
  9. PyCharm下解决Unresolved Reference问题
  10. drools 7.11.0.Final使用