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!!如有问题,欢迎评论区批评指正😁

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kubectl获取ConfigMap导出YAML时如何忽略某些字段

前言&#xff1a; 当我们在使用Kubernetes时&#xff0c;常常需要通过kubectl命令行工具来管理资源。有时我们也想将某个资源的配置导出为YAML文件&#xff0c;这样做有助于版本控制和资源的迁移。然而&#xff0c;默认情况下&#xff0c;使用kubectl get命令导出资源配置会包…

【c】有序数列插入一个整数

#include<stdio.h> int main() {int n;scanf("%d",&n);int arr[n1];for(int i0;i<n;i){scanf("%d",&arr[i]);}int a;scanf("%d",&a);arr[n]a;for(int j0;j<n;j){if(arr[j]>arr[n])//交换元素位置{int temparr[j];arr…

JFrog----常见的开源协议以及应用注意点

文章目录 1. MIT 许可证2. GPL&#xff08;通用公共许可证&#xff09;3. LGPL&#xff08;较宽松的通用公共许可证&#xff09;4. Apache 许可证 2.05. BSD 许可证开源协议的选择和注意点结论 开源软件近年来在软件开发中变得越来越流行。使用开源软件可以节省时间和资源&…

拼多多电商平台API接口,获取拼多多实时准确数据,获取产品销量、价格,sku图片及sku库存数据演示

拼多多商品详情API接口的作用是让开发者可以获取拼多多平台上特定商品的详细信息&#xff0c;包括商品的标题、价格、图片、规格、参数以及店铺信息等。通过这个接口&#xff0c;开发者可以轻松地获取商品的原始数据&#xff0c;便于进行数据分析、价格比较、爬取等操作。这为电…

算法基础六

搜索插入位置 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2 示例 2: 输入: nums [1,3,5,6], target 2 输…

ITSM变更管理,有效降低IT管理风险!

在当今数字化时代&#xff0c;信息技术的快速发展使企业面临着不断变化的需求和挑战。为了适应和应对这些变化&#xff0c;企业需要进行各种IT系统和应用的变更。然而&#xff0c;不加控制的变更可能带来潜在的风险和不良影响。因此&#xff0c;ITSM变更管理成为了一项必不可少…

贝叶斯网络 (人工智能期末复习)

文章目录 贝叶斯网络&#xff08;概率图模型&#xff09;定义主要考点例题- 要求画出贝叶斯网络图- 计算各节点的条件概率表- 计算概率- 分析独立性 贝叶斯网络&#xff08;概率图模型&#xff09; 定义 一种简单的用于表示变量之间条件独立性的有向无环图&#xff08;DAG&am…

iOS ------ UICollectionView

一&#xff0c;UICollectionView的简介 UICollectionView是iOS6之后引入的一个新的UI控件&#xff0c;它和UITableView有着诸多的相似之处&#xff0c;其中许多代理方法都十分类似。简单来说&#xff0c;UICollectionView是比UITbleView更加强大的一个UI控件&#xff0c;有如下…

GVIM 配置 for begin/end class/endclass 等配对

有时候我们的代码很长&#xff0c;或者结构比较复杂&#xff0c;多个if/else 或者begin/end 快嵌套&#xff0c;为了阅读方便&#xff0c;利用gvim插件实现块跳转还是很有实用性的&#xff0c;下面的.vimrc的配置&#xff0c;简单方便。 使用方式&#xff1a; 将光标定位到块头…

人工智能学习7(决策树算法)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm 决策树算法信息熵信息熵例题计算&#xff1a; 信息增益&#xff08;决策树划分依据之一ID3&#xff09;信息增益例题计算&#xff1a; 信息增益率(决策树划分依据之一C4.5)基尼值和基尼指数(决策树划分依据之…

使用Serv-U FTP服务器共享文件,实现无公网IP环境下远程访问

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 1. 前言 科技日益发展的今天&#xff0c;移动电子设备似乎成了我们生活的主角&#xff0c;智能…

bad_python

攻防世界 (xctf.org.cn) 前戏 下载文件&#xff0c;解压完成后是这个 一个pyc文件 这里要用到python的反编译 要用到的工具有两个 1.python自带的uncompyle6 2.pycdc文件——比uncompyle6强大一点 我们一个一个来尝试一下 uncompyle6&#xff1a; 我是直接在pycharm里面…

Python字符串模糊匹配工具:TheFuzz 库详解

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在处理文本数据时&#xff0c;常常需要进行模糊字符串匹配来找到相似的字符串。Python的 TheFuzz 库提供了强大的方法用于解决这类问题。本文将深入介绍 TheFuzz 库&#xff0c;探讨其基本概念、常用方法和示例代…

matlab实践(九):分段线性插值与三次样条插值

题目 用matlab对572所在区间分别进行分段线性插值、三次样条插值&#xff0c;计算出151&#xff0c;159&#xff0c;984&#xff0c;995的对数值&#xff0c;画出图形并在图形上用红色圆圈标记151&#xff0c;159&#xff0c;984&#xff0c;995所在的点,同时在图形中显示这些…

Spring Boot 项目代码混淆实战:保护代码安全,防止泄露

​ 目录 摘要&#xff1a; 引言&#xff1a; 1.编写混淆配置文件 2.配置Maven插件 3.执行混淆 下载ipa代码混淆保护工具 获取ipaguard登录码 代码混淆 文件混淆 IPA重签名与安装测 4.查看混淆效果 摘要&#xff1a; 本篇博客介绍了如何使用Proguard实现代码混淆&am…

Tecplot绘制涡结构(Q准则)

文章目录 目的步骤1步骤2步骤3步骤4步骤5步骤6结果 目的 Tecplot绘制涡结构(Q准则判别)并用温度进行染色 Q准则计算公式 步骤1 步骤2 步骤3 步骤4 步骤5 步骤6 结果

HTML5+CSS3小实例:纯CSS实现文字组成肖像特效

实例:纯CSS实现文字组成肖像特效 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"><meta name="viewport" conten…

人工智能_机器学习060_核函数对应数学公式_数据空间错位分割_简单介绍_以及核函数总结---人工智能工作笔记0100

我们之前做的都是线性分类问题,那么需要一根线来分割类别,但是,如果出现了,环形数据,我们知道,在二维中我们就无法分割了,那么有没有什么办法分割呢? 实际上是有的,可以看到,我们可以把数据进行升维,可以看到,如果把数据升高到2维度以上,可以看到,神奇的一幕出现了,这个时候,因…

金融帝国实验室(Capitalism Lab)V10版本公司财务报告列示优化

金融帝国实验室&#xff08;Capitalism Lab&#xff09;V10版本公司财务报告列示优化 ————————————— ★【全新V10版本开发播报】★ 即将发布的V10版本中的公司财务报告&#xff08;指标&#xff09;列示优化&#xff1a; ◈ 新增了一个按钮&#xff0c;用于在历史…

SpringCloud | Dubbo 微服务实战——注册中心详解

前言 「作者主页」&#xff1a;雪碧有白泡泡 「个人网站」&#xff1a;雪碧的个人网站 |Eureka,Nacos,Consul,Zookeeper在Spring Cloud和Dubbo中实战 引言 在项目开发过程中&#xff0c;随着项目不断扩大&#xff0c;也就是业务的不断增多&#xff0c;我们将采用集群&#xf…