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

这篇具有很好参考价值的文章主要介绍了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、连接池的主要作用是提高系统的性能和可扩展性,它可以减少数据库连接的创建和销毁次数,避免了频繁的网络交互和数据库连接的资源消耗,同时也方便了系统的升级和扩展。但连接池的缺点是会占用一定的内存和资源,并且在高并发环境中可能会出现连接池满的情况,需要合理设置连接池的参数,以便在保证系统性能的情况下,最大限度地利用连接池的资源。

hikaridatasource tomcat jdbc c3p0 dbcp,Java,数据库,开发语言,java,数据库,开发语言

⭐为什么要使用连接池?

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

  • 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!!如有问题,欢迎评论区批评指正😁文章来源地址https://www.toymoban.com/news/detail-770337.html

到了这里,关于JDBC常见的几种连接池使用(C3P0、Druid、HikariCP 、DBCP)(附上代码详细讲解)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C3P0反序列化链分析

    C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。使用它的开源项目有Hibernate、Spring等。之前有接触到过,但是没有深入了解,像之前学二次反序列化时, WrapperConnectionPoolDataSource 就是C3P0的 初学者必学的一条链,先给出完整exp,然后一

    2024年04月15日
    浏览(36)
  • Redis 常见的几种数据结构说一下?各自的使用场景?

    介绍:string 数据结构是简单的 key-value 类型。 使用场景: 一般常用在需要计数的场景,比如用户的访问次数、热点文章的点赞转发数量等等。 介绍:list 即是 链表 使用场景:发布与订阅或者说消息队列、慢查询。 介绍:hash 类似于 JDK1.8 前的 HashMap,内部实现也差不多(数组

    2024年01月24日
    浏览(47)
  • Linux使用make命令时常见的几种错误及其解决方法(Ubuntu适用)

    这是我在安装busybox时使用make menuconfig命令时所出现过的错误及我的解决方法,仅供参考: 1.出现Command \\\'make\\\' not found 解决方法: sudo apt-get install ubuntu-make sudo apt-get install make                 //我两条都输了一遍才解决问题 2.无法打开锁文件 解决方法: su           //然后输

    2024年02月04日
    浏览(59)
  • Javaweb安全——反序列化漏洞-C3P0链

    C3P0是一个开源的JDBC连接池,它实现了数据源与JNDI绑定,支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象。 即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池(Connection pool)。 ysoserial代码注释中的调用链如下: 自下向上的

    2024年02月09日
    浏览(42)
  • OceanBase—01(入门篇——使用docker安装OceanBase以及介绍连接OB的几种方式)

    1.1.1 安装前提 安装了docker Linux下安装docker以及docker安装Oracle19c的全部详细过程及各种问题解决. 1.1.2 参考 参考官网: 使用 Docker 部署 OceanBase 数据库. 提示:这是安装之后的操作,需要的话可以,安装之后可以跳到这里看修改密码!!! 安装后默认密码为空,可以修改也可以

    2024年02月09日
    浏览(47)
  • 常见的几种排序

    🐶博主主页: @ᰔᩚ. 一怀明月ꦿ  ❤️‍🔥 专栏系列: 线性代数,C初学者入门训练,题解C,C的使用文章,「初学」C++ 🔥 座右铭: “不要等到什么都没有了,才下定决心去做” 🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀 目录 冒泡

    2024年02月15日
    浏览(41)
  • 常见的几种排序方式

    排序: 所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作 稳定性: 假定在待排序的记录序列中,存在多个具有相同的的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在

    2024年02月07日
    浏览(48)
  • 常见的几种排序算法

    目录 一、插入排序 1、直接插入排序 1.1、排序方法 1.2、图解分析 1.3、代码实现 2、希尔排序 2.1、排序方法 2.2、图解分析 2.3、代码实现 二、选择排序 1、直接选择排序 1.1、排序方法 1.2、图解分析 1.3、代码实现 2、堆排序 2.1、排序方法 2.2、图解分析 2.3、代码实现 三、交换

    2024年02月09日
    浏览(47)
  • 常见的几种限流算法

    失踪人口回归,哈哈哈,最近项目比较忙,然后还要学习前端的知识,后端性能治理也比较有挑战性,还是没有太多时间沉下心来写文章,等之后好好补上。 今天1024,在此奉上本人在掘金上面的一篇文章,虽然是在其他平台发布过的文章,但还是很值得学习的。 好了话不多

    2024年02月04日
    浏览(39)
  • Jmeter常见的几种报错

    1、Java.net.UnknownHostException 这个错的含义是 没有连接到服务器地址,因此很可能是 内部网络中断导致。 2、502 Bad gateway 这个和本地的线程数无关 可能原因是网络抖动不稳定导致 3、java.net.SocketException: Socket closed 强制停止线程,连接中断产生的错误,正常压测我们等测试结束就

    2024年02月13日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包