目录

前言

一、为什么要使用数据库连接池

二、数据库连接池

2.1 优点

三、多种开源数据库连接池

3.1 C3P0数据库连接池

3.2 DBCP连接池

3.3 Druid(德鲁伊)数据库连接池

总结


前言

前面我们学习了JDBC中如何连接数据库以及实现增删查改,没看的小伙伴请点击链接

JDBC概述及数据库连接方式、JDBC增删改 查操作,今天我们继续学习JDBC中的数据库连接池。

一、为什么要使用数据库连接池

我们先回忆一下,在开发基于数据库的Web项目时,传统的步骤应该是:

    1.在主程序中建立数据库的连接

                2.进行sql语句操作

    3.断开数据库连接 

但是,这样的开发模式存在弊端:

我们想一下,普通的jdbc连接是通过drivermanager来获取的,每次建立数据库连接时都要将Connection加载到内存中,然后在验证用户名和密码。需要建立一个连接时,就要向数据库请求一次,执行完毕后再关闭连接,这样太消耗资源和时间了,并且数据库资源没有很好的得到重复利用。当有几百人或者更多的人同时访问服务器时,频繁的数据库连接操作将占用很多的系统资源,甚至会到导致服务器崩溃。

这种连接方式每次使用完之后都要断开连接。如果程序出现异常没有及时关闭数据库,那么将会导致数据库的内存泄漏,最终导致数据库重启。

这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。

由于上面的种种问题,我们推出了数据库连接池技术。

二、数据库连接池

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

        数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。

2.1 优点

        1. 资源重用

由于数据库连接得以重用,避免了频繁创建,释放连接引起的大量性能开销。在减少系统消耗的基础上,另一方面也增加了系统运行环境的平稳性。

        2. 更快的系统反应速度

数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于连接池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而减少了系统的响应时间

        3. 新的资源分配手段

对于多应用共享同一数据库的系统而言,可在应用层通过数据库连接池的配置,实现某一应用最大可用数据库连接数的限制,避免某一应用独占所有的数据库资源

        4. 统一的连接管理,避免数据库连接泄漏

在较为完善的数据库连接池实现中,可根据预先的占用超时设定,强制回收被占用连接,从而避免了常规数据库连接操作中可能出现的资源泄露

三、多种开源数据库连接池

这里需要导入Jar包

https://pan.baidu.com/s/15DLaIS-6AKfBosexVoR9CA

提取码:j2b3

3.1 C3P0数据库连接池

C3P0 是一个开源组织提供的一个数据库连接池,速度相对较慢,稳定性还可以。hibernate官方推荐使用。

连接方式:

//使用C3P0数据库连接池的配置文件方式
private static DataSource cpds = new ComboPooledDataSource("helloc3p0");
public static Connection getConnection2() throws SQLException{Connection conn = cpds.getConnection();return conn;
}

配置文件:

c3p0-config.xml

注:配置文件名一定不能改。

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><named-config name="helloc3p0"><!-- 获取连接的4个基本信息 --><property name="user">root</property><property name="password">abc123</property><property name="jdbcUrl">jdbc:mysql:///test</property><property name="driverClass">com.mysql.jdbc.Driver</property><!-- 涉及到数据库连接池的管理的相关属性的设置 --><!-- 若数据库中连接数不足时, 一次向数据库服务器申请多少个连接 --><property name="acquireIncrement">5</property><!-- 初始化数据库连接池时连接的数量 --><property name="initialPoolSize">5</property><!-- 数据库连接池中的最小的数据库连接数 --><property name="minPoolSize">5</property><!-- 数据库连接池中的最大的数据库连接数 --><property name="maxPoolSize">10</property><!-- C3P0 数据库连接池可以维护的 Statement 的个数 --><property name="maxStatements">20</property><!-- 每个连接同时可以使用的 Statement 对象的个数 --><property name="maxStatementsPerConnection">5</property></named-config>
</c3p0-config>

3.2 DBCP连接池

DBCP 是Apache提供的数据库连接池。tomcat 服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。

连接方式:

//使用dbcp数据库连接池的配置文件方式
private static DataSource source = null;
static{try {Properties pros = new Properties();InputStream is = DBCPTest.class.getClassLoader().getResourceAsStream("dbcp.properties");pros.load(is);//根据提供的BasicDataSourceFactory创建对应的DataSource对象source = BasicDataSourceFactory.createDataSource(pros);} catch (Exception e) {e.printStackTrace();}}
public static Connection getConnection4() throws Exception {Connection conn = source.getConnection();return conn;
}

配置文件:

dbcp.properties

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true&useServerPrepStmts=false
username=root
password=abc123initialSize=10
#...

3.3 Druid(德鲁伊)数据库连接池

Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、Proxool等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池,可以说是目前最好的连接池之一。

连接方式:

public class TestDruid {public static void main(String[] args) throws Exception {Properties pro = new Properties();      pro.load(TestDruid.class.getClassLoader().getResourceAsStream("druid.properties"));DataSource ds = DruidDataSourceFactory.createDataSource(pro);Connection conn = ds.getConnection();System.out.println(conn);}
}

配置文件:druid.properties

url=jdbc:mysql://localhost:3306/test?rewriteBatchedStatements=true
username=root
password=123456
driverClassName=com.mysql.jdbc.DriverinitialSize=10
maxActive=20
maxWait=1000
filters=wall

总结

以上就是数据库连接池使用的全部介绍了,比起在之前讲解得直接连接数据库要简单多了,只要会用就行。

JDBC——数据库连接池相关推荐

  1. Spring JDBC数据库连接池设置

    对于任何Java应用程序而言, 在Spring框架中设置JDBC数据库连接池都是很容易的,仅需更改spring配置文件中的一些配置即可.使用Apache Commons DBCP和Commons Po ...

  2. java jdbc init_Java 的JDBC 数据库连接池实现方法

    虽然 J2EE 程序员一般都有现成的应用服务器所带的JDBC 数据库连接池,不过对于开发一般的 Java Application . Applet 或者 JSP.velocity 时,我们可用的JDB ...

  3. Java jdbc数据库连接池

    1. 引言 近年来,随着Internet/Intranet建网技术的飞速发展和在世界范围内的迅速普及,计算机 应用程序已从传统的桌面应用转到Web应用.基于B/S(Browser/Server)架构的 ...

  4. JDBC数据库连接池练习题

    <JDBC数据库连接池练习题> 文章目录 单选题 多选题 判断题 填空题 单选题 1. 下面选项中,能够将游标从当前位置向下移一行的方法是( ). A.next() B.absolute( ...

  5. JDBC 数据库连接池(JDBCUtils工具类)

    文章目录 前言 一.JDBC作用? 二.获取数据的连接方式 三.Statement/PreStatement执行sql 四.ResultSet结果集 五.JDBC相关API 六.事务 七.批处理 八. ...

  6. 【JAVA】JDBC数据库连接池

    目录 [JDBC] [JDBC--项目示例] [JDBC-API] [DriverManager]--驱动管理类 [Connection]--数据库连接对象 [Statement]--执行 [Resu ...

  7. JDBC数据库连接池

    1,JDBC概述 1.1 JDBC概念 JDBC 就是使用Java语言操作关系型数据库的一套API 全称:( Java DataBase Connectivity ) Java 数据库连接 我们开发的 ...

  8. [JDBC技术]3.JDBC数据库连接池实例

    package jdbc; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; i ...

  9. Java -- JDBC 学习--数据库连接池

    JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet.beans)中建立数据库连接. 进行sql操作 断开数据库连接. 这种模式开 ...

最新文章

  1. 快手小葫芦网红收入大数据_KS第一个粉丝量破亿账号出现,竟是他!送辛巴上央视的网红被曝光!方丈曝出被封杀网红身份信息!球球自爆发家史,偷卖赵本山老师鞋子!...
  2. ruby json转化成对象_系统架构迁移实例:从Ruby到Rust
  3. linux dbus-daemon进程 消息转发 简介
  4. python3.8使用requests_python3.8.1 入门基础学习 之 【 requests 基础学习,python3爬虫必备基础】...
  5. lockfree buffer test
  6. vCenter 6.0安装部署
  7. python 百度云文字识别 proxy_python使用百度文字识别功能方法详解
  8. 帆软实现单元格可编辑内容并保存
  9. java寻宝题目,神都夜行录寻宝答题答案大全 挖宝答题答案汇总
  10. 怎么在HTML图片中加文字,html+css怎么在图片上添加文字
  11. cpu顶盖怎么看步进_【有趣】第19期:如何从CPU顶盖获取有用信息(上)?
  12. pos机Project v1.1
  13. 推荐10个超级实用的电脑软件 (可以快速提高工作效率)
  14. 帝国cms灵动标签调用标题图片没有图片时让其显示默认图片的方法
  15. 抖音java表白教程_抖音最火套路情话,深情感人,表白专用!
  16. SpringSecurity-基于微服务的认证与权限访问
  17. vue页面特效:雨滴、流星
  18. wordpress网站侧边栏添加广告位代码
  19. sklearn机器学习:决策树tree.DecisionTreeClassifier()
  20. 粗谈云端概念及首次写博客感悟

热门文章

  1. 《数据通信原理》笔记第二篇:第一章——Day 2
  2. button 样式_小程序 Button图标样式 实现悬浮按钮效果
  3. 20道前端高频面试题(附答案)
  4. 都市修猿传-第八章-在劫也难逃
  5. arduino+tb6612——升降结构(狗子III)
  6. 吉大软件专硕896-2008
  7. 商标注册要注意哪些事项
  8. ng2-admin项目技术整理
  9. 如何修改手机服务器地址,手机服务器地址修改
  10. java指令大全,Vi 指令大全[转载]