C3P0数据库连接池

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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 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使用默认配置或命名配置  
        //创建数据源(连接池对象)对象,自动加载src根路径下c3p0-config.xml
        ComboPooledDataSource dataSource = new ComboPooledDataSource();
5.从连接池获取对象
1. //获取连接对象
2. Connection conn = dataSource.getConnection();
6.使用对象操作数据库,查询表中所有数据并输出到控制台
      //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.关闭资源
1. //6)close 归还连接对象到连接池
2.         rs.close();
3.         stm.close();
4.         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库,可以在不同的操作系统和数据库系统上使用,具有良好的跨平台兼容性。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Java 数据库连接 数据库
一篇文章学会学会c3p0数据库连接池~
一篇文章学会学会c3p0数据库连接池~
244 0
|
SQL 缓存 Java
C3P0-数据库连接池解读
C3P0-数据库连接池解读
130 0
|
SQL 监控 druid
jdbc数据库连接池C3P0和Druid德鲁伊,Java与MySQL数据库交互
jdbc数据库连接池C3P0和Druid德鲁伊,Java与MySQL数据库交互
306 1
jdbc数据库连接池C3P0和Druid德鲁伊,Java与MySQL数据库交互
|
XML 数据库 数据格式
idea使用c3p0数据库连接池无法加载配置文件xml,配置文件放置的位置
idea使用c3p0数据库连接池无法加载配置文件xml,配置文件放置的位置
278 0
idea使用c3p0数据库连接池无法加载配置文件xml,配置文件放置的位置
|
XML Java 数据库连接
JDBC学习(六):使用c3p0数据库连接池连接数据库
JDBC学习(六):使用c3p0数据库连接池连接数据库
118 0
|
XML 关系型数据库 MySQL
IDEA使用C3P0连接Mysql数据库
IDEA使用C3P0连接Mysql数据库
IDEA使用C3P0连接Mysql数据库
|
SQL druid Oracle
在项目中使用c3p0作为数据库连接池,被技术总监怼了
数据库连接是一项非常关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。
在项目中使用c3p0作为数据库连接池,被技术总监怼了
|
Java 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(十四)-ComboPooledDataSource(C3P0连接池配置)
MySQL---数据库从入门走向大神系列(十四)-ComboPooledDataSource(C3P0连接池配置)
272 0
|
JavaScript 前端开发 数据库连接
spring+mybatis+c3p0数据库连接池或druid连接池使用配置整理
在系统性能优化的时候,或者说在进行代码开发的时候,多数人应该都知道一个很基本的原则,那就是保证功能正常良好的情况下,要尽量减少对数据库的操作。 据我所知,原因大概有这样两个: 一个是,一般情况下系统服务器和数据库服务器应该是不在同一硬件上,这时候对数据库的连接、操作就和网络有了很大的关系,连接、操作数据库越多就越影响性能。
4073 0
下一篇
无影云桌面