JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)(附上代码详细讲解)

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)以及部分理论知识


🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


目录

⭐什么是连接池?

⭐为什么要使用连接池?

⭐使用连接池

🍧连接池的常见基本配置

⭐连接池的4种常见配置方法

🍧1、理论知识

🍧2、代码实操

1. C3P0

2. Druid

3. HikariCP

4. DBCP


⭐什么是连接池?

连接池(Connection Pool)是一种数据库连接管理技术,它可以对数据库连接进行复用,从而减少了重复创建和删除连接的开销,提高了系统的性能和可扩展性。

  • 1、连接池在应用程序启动时创建一定数量的数据库连接,将这些连接保存在内存中,等待应用程序需要时提供给它,应用程序在使用完连接后将其放回连接池,而不是直接关闭它。当连接池中的连接数量不足时,连接池会自动创建新的连接,直到达到连接池的最大连接数为止。
  • 2、连接池的主要作用是提高系统的性能和可扩展性,它可以减少数据库连接的创建和销毁次数,避免了频繁的网络交互和数据库连接的资源消耗,同时也方便了系统的升级和扩展。但连接池的缺点是会占用一定的内存和资源,并且在高并发环境中可能会出现连接池满的情况,需要合理设置连接池的参数,以便在保证系统性能的情况下,最大限度地利用连接池的资源。

⭐为什么要使用连接池?

使用连接池有以下几个优点:

  • 1、提高系统性能:连接池可以减少每次请求数据库时创建和销毁连接的开销,提高了系统的响应速度和吞吐量。
  • 2、节省资源:连接池可以复用已经创建的连接,避免了频繁的创建和销毁连接所带来的资源消耗。
  • 3、方便管理和维护:连接池可以统一管理和维护连接,包括连接超时、连接池大小、连接监控等参数,方便系统的管理和维护。
  • 4、提高系统可扩展性:使用连接池可以方便地扩展系统的并发访问能力,提高了系统的可扩展性和可靠性。
  • 5、减少数据库压力:连接池可以限制同时连接数据库的数量,避免了数据库被大量请求压垮的情况,提高了数据库的稳定性。
  • 6、优化数据库访问:连接池可以优化数据库访问,包括连接的预处理、优化SQL语句等操作,提高了数据库的性能和稳定性。
  • 7、避免数据连接泄漏:连接池可以防止数据库连接泄漏,保证了系统的安全性和稳定性。

综上所述,连接池是优化系统性能、减轻系统负担、节省系统资源、提高系统可扩展性和保证系统安全性的重要手段。

⭐使用连接池

使用连接池的步骤如下:

  • 1. 导入连接池的jar包:在项目中导入连接池的jar包,如c3p0、dbcp、HikariCP等。
  • 2. 配置连接池参数:配置连接池的相关参数,如连接池的大小、最小连接数、最大连接数、超时时间、等待时间等。
  • 3. 获取连接:通过连接池获取连接对象。如果连接池中有可用的连接对象,则直接从连接池中获取;否则等待连接池创建新的连接对象。
  • 4. 使用连接:通过连接对象,可以进行数据库的增删改查操作。
  • 5. 释放资源:使用完毕后,需要将连接对象还回连接池。在关闭连接之前,可以进行相关操作,如提交事务、回滚事务、清除连接上的状态等。

下面是一个使用c3p0连接池的示例:

// 导入c3p0的jar包
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;public class TestC3p0 {// 创建连接池对象private static ComboPooledDataSource dataSource = new ComboPooledDataSource();public static void main(String[] args) throws SQLException {// 获取连接对象Connection conn = dataSource.getConnection();// 执行SQL查询PreparedStatement pst = conn.prepareStatement("SELECT * FROM user WHERE id = ?");pst.setInt(1, 1);ResultSet rs = pst.executeQuery();while (rs.next()) {System.out.println(rs.getInt("id") + " " + rs.getString("name"));}// 关闭连接rs.close();pst.close();conn.close();}
}

在这个示例中,创建了一个c3p0连接池对象,通过调用`getConnection()`方法获取连接对象。在程序执行完毕后,需要将连接对象还回连接池(释放资源)。

🍧连接池的常见基本配置

连接池的4种常见配置方法如下:

1、基本配置:

对于连接池的基本配置,如连接池的名称、用户名、密码、连接URL等,可以通过在配置文件中指定相关属性来完成。例如,在dbcp连接池中,可以通过在`context.xml`文件中增加以下配置来实现基本配置:

<Resource name="jdbc/testdb"auth="Container"type="javax.sql.DataSource"driverClassName="com.mysql.jdbc.Driver"url="jdbc:mysql://localhost:3306/testdb"username="testuser"password="testpass"maxActive="20"maxIdle="10"maxWait="-1"/>
2、连接池大小:

连接池大小决定了连接池中最多同时存在多少个连接对象。在配置文件中,可以通过设置`maxActive`属性来指定连接池的大小。例如,在c3p0连接池中,可以通过以下方式指定连接池大小:

<property name="maxPoolSize">20</property>
3、最大空闲连接数:

最大空闲连接数指的是连接池中最多可以存在多少个空闲的连接对象,这些连接对象并没有被使用,但是可以被立即使用。在配置文件中,可以通过设置`maxIdle`属性来指定最大空闲连接数。例如,在dbcp连接池中,可以通过以下方式指定最大空闲连接数:

<property name="maxIdle">10</property>
4、最大等待时间:

最大等待时间表示当连接池中所有的连接对象都被占用时,新的连接请求需要等待多长时间才能获得连接对象。在配置文件中,可以通过设置`maxWait`属性来指定最大等待时间。例如,在HikariCP连接池中,可以通过以下方式指定最大等待时间:

dataSource.setMaximumPoolSize(20);
dataSource.setMinimumIdle(10);
dataSource.setConnectionTimeout(30000);

除了上面介绍的连接池配置方法以外,还有其他的配置方法,如连接池的自动回收机制、连接池的失败重试机制等。这些配置方法对于优化连接池的性能、稳定性具有重要作用。

⭐连接池的4种常见配置方法

🍧1、理论知识

JDBC常见的几种连接池包括:

  • 1、C3P0:C3P0是一个非常流行的开源连接池。它支持JDBC3规范和JDBC2的标准扩展,具有良好的性能和稳定性。C3P0提供了众多的配置参数,可以满足不同场景下的需求。
  • 2、Druid:Druid是阿里巴巴开发的一个高性能、可扩展、可监控的开源JDBC连接池。Druid支持JDBC和非JDBC数据源,能够监控连接池的状态、性能、使用情况等。Druid还提供了丰富的监控统计功能,可以通过Web界面或API查看连接池的使用情况。
  • 3、HikariCP:HikariCP是一个轻量级、高效的JDBC连接池,具有快速启动和低延迟的特点。HikariCP的设计目标是提供极佳的性能和可靠性,同时尽量减少资源消耗和开销。HikariCP支持各种JDBC驱动程序和数据源。相比于其他连接池,HikariCP配置简单,易于使用。
  • 4、DBCP:DBCP是Apache组织开发的一个开源连接池,支持JDBC1、JDBC2、JDBC3规范和JDBC的扩展API。DBCP提供了许多配置选项,可以调整连接池的性能和稳定性。相比C3P0,DBCP的性能略有下降,但是在一些场景下,DBCP比C3P0更加稳定

以上是常见的四种连接池,每种连接池都有其自身的特点和优势,在选择连接池时需要根据具体业务需求和系统性能需求进行选择。

🍧2、代码实操

1. C3P0

C3P0的使用方法如下,首先需要引入C3P0的jar包:

<dependency><groupId>c3p0</groupId><artifactId>c3p0</artifactId><version>0.9.5.5</version>
</dependency>

然后在代码中使用以下方式获取连接:

ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("123456");
Connection conn = dataSource.getConnection();

其中,ComboPooledDataSource是C3P0提供的数据源,需要设置数据库的相关信息,包括数据库驱动类、JDBC URL、用户名和密码。getConnection()方法用于获取一个数据库连接。

2. Druid

Druid的使用方法如下,首先需要引入Druid的jar包:

<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version>
</dependency>

然后在代码中使用以下方式获取连接:

DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("123456");
Connection conn = dataSource.getConnection();

其中,DruidDataSource是Druid提供的数据源,需要设置数据库的相关信息,包括数据库驱动类、JDBC URL、用户名和密码。getConnection()方法用于获取一个数据库连接。

3. HikariCP

HikariCP的使用方法如下,首先需要引入HikariCP的jar包:

<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>3.4.5</version>
</dependency>

然后在代码中使用以下方式获取连接:

HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/test");
config.setUsername("root");
config.setPassword("123456");
config.setDriverClassName("com.mysql.jdbc.Driver");
HikariDataSource dataSource = new HikariDataSource(config);
Connection conn = dataSource.getConnection();

其中,HikariConfig用于设置数据库的相关信息,包括JDBC URL、用户名、密码和驱动类。HikariDataSource是HikariCP提供的数据源,通过config参数初始化。getConnection()方法用于获取一个数据库连接。

4. DBCP

DBCP的使用方法如下,首先需要引入DBCP的jar包:

<dependency><groupId>commons-dbcp</groupId><artifactId>commons-dbcp</artifactId><version>1.4</version>
</dependency>

然后在代码中使用以下方式获取连接:

BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUsername("root");
dataSource.setPassword("123456");
Connection conn = dataSource.getConnection();

其中,BasicDataSource是DBCP提供的数据源,需要设置数据库的相关信息,包括数据库驱动类、JDBC URL、用户名和密码。getConnection()方法用于获取一个数据库连接。

总结不易,希望uu们不要吝啬亲爱的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开启全新消费革命——消费增值,让每一笔消费变成财富!

你是否厌倦了仅仅购买物品或享受服务后便一无所有的消费方式&#xff1f;现在&#xff0c;消费增值的概念将彻底改变你的消费观念&#xff01;通过参与消费增值&#xff0c;你的每一笔消费都将变得更有价值&#xff01; 消费增值是一种全新的消费理念&#xff0c;它让你在购物的…

tex中的边框

文章目录 利用tcolorbox宏包给公式加框 利用tcolorbox宏包 tcolorbox可以创建一个盒子的环境&#xff0c;例如&#xff1a; \documentclass{article} \usepackage{tcolorbox} \begin{document}\begin{tcolorbox}[left1cm, right1cm, top0.5cm, bottom0.5cm,colbackblue!10!wh…

CSRF之pikachu靶场DW

1&#xff0c;登录皮卡丘靶场&#xff0c;get请求&#xff1b; 2&#xff0c;抓包并修改标记后的个人信息 最后放通一下&#xff0c;发现账号信息被修改 2&#xff0c;post请求 1提交post数据并使用bp抓包 2.利用工具改包&#xff0c;并生成url 3&#xff0c;点击提交后&#…

SpringBoot自定义异常处理机制

说明&#xff1a;在完整的项目结构中&#xff0c;我们通常会创建一个自定义的异常处理机制&#xff0c;在系统可能出现异常的地方手动抛出这些异常&#xff0c;可以快速定位到异常代码片段&#xff0c;提供项目的可维护性。 本文介绍在SpringBoot项目中&#xff0c;搭建一套自…

ssm党务政务服务热线平台源码和论文答辩PPT

摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统,主要包罗软件架构模式、整体功能模块、数据库设计…

任意密码重置+CRRF

一、XSS漏洞 在商城的搜索处&#xff0c;输入标准语句的传参直接就可以弹窗 二、逻辑漏洞-用户枚举 在用户注册界面&#xff0c;点击发送验证码&#xff0c;然后用BURP发包 更改手机号传参&#xff0c;这里手机号传参没有进行加密&#xff0c;直接用手机号的位置进行爆破 正确的…

LeetCode力扣每日一题(Java):9、回文数

一、题目 二、解题思路 1、我的思路 当x<0时&#xff0c;x一定不是回文数&#xff0c;直接返回false 当x>0且x<10时&#xff0c;x一定是回文数&#xff0c;直接返回true x>10时&#xff0c;先将x转为字符串。将数字转成字符串方法挺多的&#xff0c;以下是&…

06、基于内容的过滤算法Tensorflow实现

06、基于内容的过滤算法Tensorflow实现 开始学习机器学习啦&#xff0c;已经把吴恩达的课全部刷完了&#xff0c;现在开始熟悉一下复现代码。全部工程可从最上方链接下载。 05、基于梯度下降的协同过滤算法中已经介绍了协同过滤算法的基本实现方法&#xff0c;但是这种方法仅…

SpringBoot集成i18n(多语言)

配置文件 spring: messages: basename: il8n/messages # 配置国际化资源文件路径 fallback-to-system-locale: true # 是否使用系统默认的语言环境作为备选项 国际化配置 import org.springframework.context.annotation.Bean; import org.spr…

MySQL-宋红康-(课P14-P15)-基本查询语句(Select)

b站视频&#xff1a; 14-最基本的SELECT...FROM结构_哔哩哔哩_bilibili 8.4 基本查询(Select)语句 数据table: emp员工表创建如下 # 员工表 CREATE TABLE EMP (EMPNO INT PRIMARY KEY, -- 员工编号ENAME VARCHAR(10), -- 员工名称JOB VARCHAR(9), -- 工…

10、SQL注入——数据库基础

文章目录 一、数据库概述二、数据库分类Mysql数据库连接方法 三、识别数据库四、SQL语法4.1 SQL基本语法4.2 高级操作 一、数据库概述 数据库&#xff08;database&#xff09;&#xff1a;存储在磁盘、磁带、光盘或其他外存介质上、按一定结构组织在一起的相关数据的集合。数…

龙迅分配器LT86102UXE/LT86104UX,HDMI一分二/HDMI一分四

龙迅LT86102UXE描述; Lontium LT86102UXE HDMI2.0分配器具有1&#xff1a;2的分配器&#xff0c;符合HDMI2.0/1.4规范&#xff0c;最大6Gbps高速数据速率&#xff0c;自适应均衡RX输入和预先强调的TX输出&#xff0c;以支持长电缆应用程序&#xff0c;内部TX通道交换灵活的PCB…

部分c++11特性介绍

在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1)&#xff0c;使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中的漏洞进行修复&#xff0c;语言的核心部分则没有改动&#xff0c;因此人们习惯性的把两个标准合并称为C98/03标…

Day50力扣打卡

打卡记录 三个无重叠子数组的最大和 链接 滑动窗口 class Solution:def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]:n, ans len(nums), []sum1 sum2 sum3 0maxsum1idx, maxsum12idx 0, ()maxsum1 maxsum12 total 0for i in range(2 * …

01 高等数学.武忠祥.0基础

第一章 函数与极限 01映射与函数 02 函数概念 对应法则 定义域 常见函数 函数的几种特性 周期函数不一定有最小周期。 涉及额外与复习 存在与任意的关系

MYSQL练题笔记-高级查询和连接-简单题3题

写了下面的前3道题。 一、每位经理的下属员工数量 看到题目就知道和之前的至少有5名下属的经理很相似&#xff0c;嘿嘿写对了就不做过多的讲解了。 二、员工的直属部门相关表和题目如下 刚开始觉得很简单&#xff0c;但是仔细想想这道题有两个输出&#xff0c;觉得想不出来&a…

C语言数组(上)

# 数组的概念 数组是一组相同类型元素的集合。数组中存放的是一个或多个数据&#xff0c;但是数组中的元素个数不能为零&#xff1b;数组中存放的所有元素&#xff08;数据&#xff09;的类型必须是相同的。 数组分为一维数组和多维数组&#xff0c;多维数组一般比较多见的是二…

跨域问题与解决-gatway

3.6.1.什么是跨域问题 跨域&#xff1a;域名不一致就是跨域&#xff0c;主要包括&#xff1a; 域名不同&#xff1a; www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com域名相同&#xff0c;端口不同&#xff1a;localhost:8080和localhost8081 跨域问题&a…

ADB命令集锦,一起来学吧

前言 在测试APP时&#xff0c;我们常常会用到adb命令来协助测试&#xff0c;那么adb命令到底是什么&#xff1f;有什么用&#xff1f;怎么用&#xff1f; 今天我就整理了一些工作中常用的adb知识点&#xff0c;希望对大家有所帮助。 ADB学习全攻略 ADB是什么&#xff1f; a…

三种定时器的实现方式

一、Scheduled Schedule是Spring框架提供的一种简单的定时任务调度方法&#xff0c;通过注解的方式即可实现定时任务的调度。它适用于简单的定时任务需求&#xff0c;例如每隔一段时间执行一次任务或者在特定时间执行任务。Scheduled可以轻松地集成到Spring应用中&#xff0c;…