JDBC: 连接池

文章目录

  • 没有连接池的现状
  • 连接池解决现状问题的原理
  • 连接池好处
  • 常用连接池的介绍
  • Druid连接池
    • DRUID简介
    • Druid常用的配置参数
    • Druid连接池基本使用
      • API介绍
    • 案例代码

在这里插入图片描述


没有连接池的现状

通过下图来分析一下我们目前jdbc程序的结构。

在这里插入图片描述

以前使用的jdbc的缺点:

1、操作数据库都需要创建连接,操作完成还需要关闭连接

2、创建连接和关闭连接需要可能比执行sql需要的时间都长

3、一个网站需要高频繁的访问数据库,如果短时间频繁的访问数据库服务器,就容易造成服务器的宕机,即死机。


连接池解决现状问题的原理

注意:

通过画图分析得出:当前的 jdbc 程序每次访问数据库都需要创建一个新的连接,访问完毕之后,还需要释放资源。

那么在这样的一个过程中,连接的创建和销毁所消耗的资源是远远大于我们发送sql并执行的时间的。基于这样的情况,jdbc 程序将大量的资源浪费在了连接的创建和销毁上。

举例:就像在上海坐地铁,就一站2分钟的路程,往往在买地铁票的过程需要等待至少10分钟以上的时间。这样是不合理的。所以我们需要对这样的结构进行优化。

思考上面的结构,大部分的时间浪费在了创建和销毁上。那么能不能实现将这些连接回收和利用呢?

这样就不需要不停的创建和销毁了。只需要创建一次,放在指定的地方。使用的时候,直接从里面拿就行了。用完放回原来的地方。不去销毁,当我再次使用的时候,去拿就行了。而这样的解决方案就是我们需要的。


优化后的结构如下:

说明:首先创建一定数量的连接,然后放到指定的地方。当需要获取连接的时候,直接从指定的地方获取。用完了,再将连接放回去。这样就能将连接的回收利用。并且不用花费大量时间在创建和销毁连接上。

解决方案如下图所示:

在这里插入图片描述

连接池好处

连接池中保存了一些数据库连接,这些连接是可以重复使用的。节省数据库的资源消耗。


常用连接池的介绍

javax.sql.DataSource表示数据库连接池,DataSource 本身只是 Sun 公司提供的一个接口,没有具体的实现,它的实现由连接池的数据库厂商去实现。我们只需要学习这个工具如何使用即可。

该接口如下:

public interface DataSource {Connection getConnection();
}

常用的连接池实现组件有以下这些:

  1. 阿里巴巴-德鲁伊Druid连接池:Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求。
  2. C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0有自动回收空闲连接功能。
  3. DBCP(DataBase Connection Pool)数据库连接池,是 Apache 上的一个 Java 连接池项目。dbcp 没有自动回收空闲连接的功能。

Druid连接池

DRUID简介

​Druid 是阿里巴巴开发的号称为监控而生的数据库连接池(可以监控访问数据库的性能),Druid 是目前最好的数据库连接池。在功能、性能、扩展性方面,都超过其他数据库连接池。

Druid 已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验。如:一年一度的双十一活动,每年春运的抢火车票。

Druid常用的配置参数

url数据库连接字符串jdbc:mysql://localhost:3306/数据库名
username数据库的用户名
password数据库的密码
driverClassName驱动类名。根据url自动识别,这一项可配可不配,如果不配置druid会根据url自动识别数据库的类型,然后选择相应的数据库驱动名
initialSize初始化时建立的物理连接的个数。初始化发生在显式调用init方法,或者第一次获取连接对象时
maxActive连接池中最大连接数
maxWait获取连接时最长等待时间,单位是毫秒。

Druid连接池基本使用

API介绍

核心类:DruidDataSourceFactory

获取数据源的方法:使用com.alibaba.druid.pool.DruidDataSourceFactory类中的静态方法:

public static javax.sql.DataSource createDataSource(Properties properties)
创建一个连接池,连接池的参数使用properties中的数据

配置信息在 properties 属性对象中。

我们可以看到 Druid 连接池在创建的时候需要一个 Properties 对象来设置参数,所以我们使用properties 文件来保存对应的参数。

Druid连接池的配置文件名称随便,放到src目录或者项目根目录下面加载
druid.properties文件内容:

# 数据库连接参数
url=jdbc:mysql://localhost:3306/day05_db
username=root
password=123
driverClassName=com.mysql.jdbc.Driver

案例代码

public class Demo03 {public static void main(String[] args) throws Exception {//加载properties文件的内容到Properties对象中Properties info = new Properties();//加载项目下的属性文件 相对项目根目录
//        FileInputStream fis = new FileInputStream("druid.properties");//相对src目录InputStream fis = Test01.class.getClassLoader().getResourceAsStream("druid.properties");//从输入流中加载属性info.load(fis);System.out.println(info);//创建DRUID连接池,使用配置文件中的参数DataSource dataSource = DruidDataSourceFactory.createDataSource(info);//从DRUID连接池中取出连接//Connection conn = dataSource.getConnection();//System.out.println("conn = " + conn);
// 需求: 根据用户名和密码 查询用户信息Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {// 获得连接conn = dataSource.getConnection();// 获得发送sql的对象String sql = "select * from emp where name=? and city=?";pstmt = conn.prepareStatement(sql);// 如果有问号,需要 设置参数,注意:下标从1开始pstmt.setString(1, "刘备");pstmt.setString(2, "北京");// 执行sql 获得结果rs = pstmt.executeQuery();// 处理结果if (rs.next()) {int id = rs.getInt("id");String name = rs.getString("name");String city = rs.getString("city");System.out.println(id + ":::" + name + "===" + city);} else {System.out.println("没有查到对应的用户信息!");}} catch (Exception e) {} finally {
//            JDBCUtils.release(conn, pstmt, rs);}}
}





本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1558416.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SeaTunnel如何创建Socket数据同步作业?

本文为Apache SeaTunnel Socket Connector的使用文档,旨在帮助用户快速理解和有效利用Socket Connector,助力用户的应用程序实现高效、稳定的网络通信。 Socket是应用层与TCP/IP协议族之间进行通信的中间软件抽象层,它是网络编程的基础&…

Vue工程化结构环境安装及搭建教程 : 之nvm

vue需要的环境: node.js : Node.js和Vue.js通常会一起使用。Node.js作为后端服务器,处理服务器端的逻辑和数据访问,而Vue.js则负责前端用户界面的构建和交互。通过Ajax通信,Vue.js应用程序向Node.js服务器发送请求,并…

扩展、包含、泛化-系统架构师(七十七)

1()是系统分析阶段结束后得到的工作产品,()是系统测试阶段完成后的工作产品。 问题1 A系统设计规格说明 B系统方案建议书 C系统规格说明 D单元测试数据 问题2 A验收测试计划 B测试标准 C系统测试计划 D操作手…

基于STM32单片机的配电室环境监测系统

本设计了一个基于STM32单片机的配电室环境监测系统。该系统可以实现配电室环境温湿度检测、烟雾浓度检测和火焰信息检测,这主要是为了防止火灾发生;本系统还加入了红外人体检测模块,可以检测配电室周围是否有行人经过,最终将传感器…

极狐GitLab 发布安全补丁版本 17.4.1、17.3.4、17.2.8

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料: 极狐GitLab 官网极狐…

Autodesk Flame 2025:视觉特效制作解决方案

Autodesk Flame 2025是一款功能强大的视觉特效制作解决方案,由Autodesk公司开发。它提供了出色的性能,为视觉特效艺术家成功完成制作项目提供了所需的交互性和灵活性。 以下是Autodesk Flame 2025的一些主要特点和功能: 高效的三维合成环境&…

基于BERT的深度强化学习求解图上的组合优化问题(未完)

文章目录 Abstract1 Introduction2 文献综述2.1 相关的深度学习方法2.2 基于强化学习的方法3 Methodology3.1 问题定义和预备知识3.2 策略网络架构Abstract 组合优化,如图上的车辆路径和旅行商问题,是NP-hard问题,几十年来一直被研究。已经提出了许多方法来解决这些问题,包…

SSM高校体育器材管理系统-计算机毕业设计源码48197

摘 要 如今计算机行业的发展极为快速,搭载于计算机软件运行的数据库管理系统在各行各业得到了广泛的运用,其在数据管理方面具有的准确性和高效性为大中小企业的日常运营提供了巨大的帮助。在高校体育器材管理系统中,一开始对体育器材的管理…

python迭代器和生成器区别是什么

python中迭代器和生成器的区别 1、共同点 生成器是一种特殊的迭代器。 2、不同点 a、语法上: 生成器是通过函数的形式中调用 yield 或()的形式创建的。 迭代器可以通过 iter() 内置函数创建。 b、用法上&#x…

加密软件有哪些?2024年十大好用的企业文件加密软件大盘点

随着数字化转型的加速,企业面临的数据安全威胁日益增加。为防止敏感数据泄露,企业文件加密已成为保护公司机密信息的必要手段。以下是2024年十大好用的企业文件加密软件大盘点,帮助企业在复杂的数字环境中确保数据安全。 1.安秉加密软件 安秉…

WPF中的内容控件

控件分类 在第一篇文章.Net Core和WPF介绍中的WPF的功能和特性部分根据功能性介绍了WPF的控件 名称。 在接下来的文章中,将会详细的介绍各个控件的概念及使用。 主要包括: 内容控件:Label、Button、CheckBox、ToggleButton、RadioButton、…

几何建模基础-拓扑结构介绍

1.什么是拓扑? 拓扑是研究几何图形或空间在连续改变形状后还能保持不变的一些性质的一个学科。它只考虑物体间的位置关系而不考虑它们的形状和大小。 Body对象的拓扑可以理解为面(Face)与边(Edge)、边( E…

fmql之Linux设备驱动框架

设备驱动框架 正点原子第39章---LED驱动框架 测试 成功: 贴代码 (不需要测试APP) /***************************************************************Copyright © ALIENTEK Co., Ltd. 1998-2029. All rights reserved.文件名 : le…

Copilot重磅更新!OneDrive全新功能炸裂

今天早上一打开onedrive,就发现了弹窗提醒,它,终于来了: copilot in onedrive全新功能来袭! 当我们在onedrive中随意选择一个文件,顶部功能栏便出现了copilot按钮: 点击按钮后出现三个选项&…

Tauri 2.0 稳定版发布

Tauri 2.0 稳定版发布 Tauri 是什么? Tauri 应用程序的前端使用您喜欢的 Web 前端栈编写。它在操作系统的 WebView 中运行,并与主要用 Rust 编写的应用核心进行通信。 我何时应该使用 Tauri? 如下任一一项符合,你应该使用 Ta…

立体扬声器棒球帽专利TRO维权,速查避免踩坑

案件基本情况起诉时间:2024-9-18案件号:24-cv-08626原告:Audiowear Technology Corporation原告律所:Loza & Loza, LLP起诉地:伊利诺伊州北部法院品牌介绍Audiowear Technology Corporation,一家位于特…

SpringMVC框架:入门讲解和基础案例解析

Spring Web MVC是什么? Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架。使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型 。框架的目的就是帮助我们简化开发&…

嵌入式设备硬件和软件安全设计

1. 引言 哪个领域的网络安全实施记录最差? 既不是 PKI/数字证书,也不是 密钥管理,也不是 OAuth。很可能是嵌入式设备和物联网 领域。 总的来说,这似乎是一个梦想,但如果可设计出“设计安全”的系统,而不…

DHCP Snooping典型配置举例(如何防止路由器乱接问题)

全局开启DHCP Snooping配置举例 组网需求 Router B通过以太网端口Ten-GigabitEthernet0/0/6连接到合法DHCP服务器,通过以太网端口Ten-GigabitEthernet0/0/8连接到非法DHCP服务器,通过Ten-GigabitEthernet0/0/7连接到DHCP客户端。要求: 与合…

各省常住人口及人口密度面板数据(2000-2022年)

常住人口指在某地区居住超过一定时间(通常为半年以上)的人口,而人口密度则指每平方千米或每公顷内的常住人口数。数据集的主要指标包括: 省份年份常住人口(万人)人口密度(人/平方公里&#xff…