java之C3P0连接池介绍和使用方法 简单易懂

2023-12-23 09:42:31


前言

数据库连接池是数据库编程中常用的一种技术,它可以有效地管理数据库连接,提高数据库访问的性能和效率。在 Java 编程中,有多种数据库连接池可供选择,其中之一就是 C3P0。本文将详细介绍 C3P0 数据库连接池的使用,包括原理、配置、常见问题和示例代码,旨在帮助基础小白更好地理解和使用这一技术。

一. 什么是数据库连接池?

在了解 C3P0 数据库连接池之前,让我们先明确什么是数据库连接池。数据库连接池是一个维护数据库连接的池子,它预先创建一定数量的数据库连接,并将这些连接保存在池中,以便应用程序在需要时可以从池中获取连接,而不是每次都创建新的连接。

数据库连接是一种昂贵的资源,创建和销毁连接的开销很大。通过使用连接池,可以避免频繁地创建和销毁连接,提高了数据库访问的性能和效率。连接池还可以控制连接的数量,防止连接数过多导致数据库性能下降,同时还可以管理连接的状态、超时和异常处理。

二.jar包下载

https://sourceforge.net/projects/c3p0/

三. C3P0 数据库连接池介绍

C3P0 是一个开源的 JDBC 数据库连接池库,它提供了高度灵活和高性能的连接池实现。C3P0 可以与各种关系型数据库一起使用,包括 MySQL、Oracle、SQL Server 等。它的名称 “C3P0” 实际上代表 “Connect3 Pool”,意味着它可以管理多个数据库连接。

四.C3P0的配置和使用

第一种

直接给值
代码如下:

//c3p0的数据源
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //连接数据库参数
        dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
        dataSource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/库名");
        dataSource.setUser("用户名");
        dataSource.setPassword("密码");
        //连接池参数设置
        dataSource.setInitialPoolSize(5);//初始数量
        dataSource.setMaxPoolSize(20);//最大数量
        dataSource.setCheckoutTimeout(3000);//连接超时
        //从连接池中获取一个连接
        Connection conn = dataSource.getConnection();
        ResultSet r = conn.prepareStatement("select count(*) from student").executeQuery();
        if (r.next()){
            System.out.println(r.getInt(1));
        }
        conn.close();//释放连接-------》将当前的工作连接,释放为空闲连接

运行结果:
在这里插入图片描述

第二种

使用xml配置文件默认给值

 public void show3() throws SQLException {
        //从xml配置文件加载连接池配置
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
        //获取数据库连接
        Connection conn = dataSource.getConnection();
        ResultSet r = conn.prepareStatement("select count(*) from student").executeQuery();
        if (r.next()){
            System.out.println(r.getInt(1));
        }
        //释放连接-------》将当前的工作连接,释放为空闲连接
        conn.close();
    }

xml文件配置

   <c3p0-config>
    <!--使用默认的配置读取数据库连接池对象 -->
    <default-config>
        <!--  连接参数 -->
        <property name="driverClass">com.mysql.cj.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/studentdb</property>
        <property name="user">root</property>
        <property name="password">sasa</property>

        <!-- 连接池参数 -->
        <!--初始化申请的连接数量-->
        <property name="initialPoolSize">5</property>
        <!--最大的连接数量-->
        <property name="maxPoolSize">10</property>
        <!--超时时间-->
        <property name="checkoutTimeout">3000</property>
    </default-config>
</c3p0-config>

运行结果:
在这里插入图片描述

第三种

使用properties配置文件给值

public void show1() throws SQLException, IOException, PropertyVetoException {
        //c3p0的数据源
        ComboPooledDataSource db = new ComboPooledDataSource();
        //从配置文件获取值
        Properties properties = new Properties();
        properties.load(demo1.class.getClassLoader().getResourceAsStream("db.properties"));
        String pwd = properties.getProperty("pwd");
        String user = properties.getProperty("user");
        String url = properties.getProperty("url");
        String driver = properties.getProperty("driver");
        db.setPassword(pwd);
        db.setUser(user);
        db.setJdbcUrl(url);
        db.setDriverClass(driver);
        //连接池参数
        db.setInitialPoolSize(5);//初始数量
        db.setMaxPoolSize(20);//最大数量
        db.setCheckoutTimeout(3000);//连接超时
        //从连接池中获取一个连接
        Connection conn = db.getConnection();
        ResultSet r = conn.prepareStatement("select count(*) from student").executeQuery();
        if (r.next()){
            System.out.println(r.getInt(1));
        }
        conn.close();//释放连接-------》将当前的工作连接,释放为空闲连接
    }

运行结果:
在这里插入图片描述

五.总结

c3p0连接池:
支持连接池的连接重用和管理。
可以配置连接池的各项参数,以满足不同性能需求。
具备连接超时、闲置连接的回收、异常处理等功能。
提供了 JMX 支持,可以通过 JMX 监控和管理连接池。
支持 JDBC3 和 JDBC4。
下面我们将详细介绍如何在 Java 应用程序中使用 C3P0 数据库连接池。

文章来源:https://blog.csdn.net/weixin_72473547/article/details/135164471
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。