C3P0数据库连接池

目录

一:连接池介绍

1.1连接池解决的问题

2.常用的数据库连接池

二:c3p0介绍

2.1C3P0介绍:

2.2C3P0快速入门

1.常用参数说明

2.API介绍

3.使用步骤

1.导入jar包c3p0-0.9.1.2.jar

2.编写c3p0-config.xml配置文件,配置对应参数

3.将配置文件放在src目录下

4.创建连接池对象ComboPooledDataSource,使用默认配置或命名配置

5.从连接池获取对象

6.使用对象操作数据库,查询表中所有数据并输出到控制台

7.关闭资源

三:使用总结

1.使用事项注意

2.使用C3P0的优点


一:连接池介绍

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

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

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

1.1连接池解决的问题

在以往的jdbc程序每次访问数据库都需要创建一个新的连接,访问完毕之后,还需要释放资源。那么在这样的一个过程中,连接的创建和销毁所消耗的资源是远远大于我们发送sql并执行的时间的。基于这样的情况,我们发现我们的jdbc程序将大量的资源浪费在了连接的创建和销毁上。

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

思考上面的结构,大部分的时间浪费在了创建和销毁上。那么我们能不能实现将这些连接回收和利用呢?这样我们就不需要不停的创建和销毁了。只需要创建一次,放在指定的地方。当我们使用的时候,直接从里面拿就行了。用完放回原来的地方。不去销毁,当我再次使用的时候,去拿就行了。而这样的解决方案就是我们需要的。

优化后的结构如下:

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

2.常用的数据库连接池

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

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

  1. 阿里巴巴-德鲁伊Druid连接池:Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求。

  2. C3P0是一个开源的JDBC连接池,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate,Spring等。C3P0有自动回收空闲连接功能。

  3. DBCP(DataBase Connection Pool)数据库连接池,是Apache上的一个Java连接池项目。dbcp没有自动回收空闲连接的功能。

二:c3p0介绍

2.1C3P0介绍:

C3P0 是一个开源的JDBC连接池,目前spring 和 hibernate框架对C3P0是支持的。使用c3p0数据库连接池之前,首先需要在资料中找到如下的jar包,加载到项目

2.2C3P0快速入门

1.常用参数说明

参数 说明
driverClass 数据库驱动类。例如:com.mysql.jdbc.Driver
jdbcUrl 连接数据库的url地址。例如:jdbc:mysql://localhost:3306/day05_db
user 连接数据库的用户名。例如:root
password 连接数据库的密码。例如:1234
initialPoolSize 刚创建好连接池的时候连接数量
maxPoolSize 连接池中最多可以放多少个连接

2.API介绍

com.mchange.v2.c3p0.ComboPooledDataSource类表示C3P0的连接池对象,常用2种创建连接池的方式:

1.无参构造,使用默认配置

2.有参构造,使用命名配置

public ComboPooledDataSource()

无参构造使用默认配置(使用xml中default-config标签中对应的参数)
public ComboPooledDataSource(String configName)

有参构造使用命名配置(configName:xml中配置的名称,使用xml中named-config标签中对应的参数)
public Connection getConnection() throws SQLException

从连接池中取出一个连接

3.使用步骤

1.导入jar包c3p0-0.9.1.2.jar
2.编写c3p0-config.xml配置文件,配置对应参数
XML 复制代码
<?xml version="1.0" encoding="utf-8" ?>
<!--配置的跟标签-->
<c3p0-config>
    <!--默认数据源配置-->
    <default-config>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <property name="jdbcUrl">jdbc:mysql://数据库名称</property>
        <property name="user">root</property>
        <property name="password">1234</property>
        <property name="initialPoolSize">10</property>
        <property name="maxIdleTime">30</property>
        <property name="maxPoolSize">100</property>
        <property name="minPoolSize">10</property>
    </default-config>

    <!-- This app is massive! -->
    <named-config name="xx">
    </named-config>
</c3p0-config>
3.将配置文件放在src目录下
4.创建**连接池对象ComboPooledDataSource,**使用默认配置或命名配置
java 复制代码
        //创建数据源(连接池对象)对象,自动加载src根路径下c3p0-config.xml
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
5.从连接池获取对象
java 复制代码
       //获取连接对象
        Connection conn = dataSource.getConnection();
6.使用对象操作数据库,查询表中所有数据并输出到控制台
java 复制代码
      //3)创建发送sql的对象
        Statement stm = conn.createStatement();
        //4)发送sql语句,获取ResultSet结果集
        String selectSql="select * from user";
        ResultSet rs = stm.executeQuery(selectSql);
        //5)解析结果集
        ArrayList<User> users = new ArrayList<>();
        while (rs.next()){
            int id=rs.getInt(1);
            String name=rs.getString("username");
            String password=rs.getString(3);
            User user = new User();
            user.setId(id);
            user.setPassword(password);
            user.setUserName(name);
            users.add(user);
        }
        System.out.println(users);
7.关闭资源
java 复制代码
     //6)close 归还连接对象到连接池
        rs.close();
        stm.close();
        conn.close();

三:使用总结

1.使用事项注意

C3P0配置文件名称必须为c3p0-config.xml

C3P0命名配置可以有多个

2.使用C3P0的优点

  1. 高效性:C3P0数据库连接池通过最小化数据库连接的创建和释放操作,提供快速和高效的数据库连接,从而显著提高了系统的响应速度和性能。

  2. 连接管理:C3P0数据库连接池可以自动管理和监控连接的可用性和状态,包括连接的创建、分配、回收和销毁等操作,减轻了开发人员的工作负担。

  3. 连接重用:C3P0数据库连接池可以重用已经建立的数据库连接,避免每次都重新创建连接,从而减少了数据库的负载和开销。

  4. 连接池配置:C3P0数据库连接池提供了丰富的配置选项,可以根据具体的需求进行灵活的配置,包括最大连接数、最小连接数、连接超时等参数的设置。

  5. 连接缓存:C3P0数据库连接池可以缓存数据库连接,避免了频繁地创建和销毁连接的开销,提高了数据库操作的效率。

  6. 连接错误处理:C3P0数据库连接池可以处理连接异常和错误情况,包括连接超时、连接池溢出等,提供了容错机制,保证了系统的稳定性和可靠性。

  7. 连接监控:C3P0数据库连接池可以监控连接的使用情况和状态,包括连接的活跃数、空闲数等,提供了连接池的性能统计和监控功能。

  8. 跨平台兼容性:C3P0数据库连接池是一个开源的Java库,可以在不同的操作系统和数据库系统上使用,具有良好的跨平台兼容性。

相关推荐
Tcoder-l3est6 分钟前
【论文阅读】XuanYuan: An AI-Native Database
数据库·论文阅读·ai-native
长亭外的少年11 分钟前
ClickHouse 介绍:深度解析高性能列式数据库的核心优势
java·数据库·clickhouse
醇氧28 分钟前
【postgresql】模式(SCHEMA)
数据库·sql·postgresql
zengson_g36 分钟前
如何在 PostgreSQL 中实现数据的去重操作,尤其是对于复杂的数据结构?
数据库·postgresql
zengson_g37 分钟前
如何优化 PostgreSQL 中对于树形结构数据的查询?
数据库·postgresql
鞥牧魂人41 分钟前
数据库——事务管理
服务器·数据库·oracle
冯宝宝^1 小时前
图书管理系统
服务器·数据库·vue.js·spring boot·后端
失眠的稻草人2592 小时前
【高阶数据结构】B-数、B+树、B*树的原理
数据结构·数据库·b树
令人着迷2 小时前
Redis核心问题总结(一)
数据库·redis·缓存
java6666688882 小时前
Spring Boot与HashiCorp Vault的集成
数据库·spring boot·oracle