Java使用C3P0连接池详解

article/2025/10/29 16:54:09

什么是C3P0连接池:

开源的JDBC连接池,C3P0连接池是在程序操作数据库之前预先根据配置文件创建一定数量的连接,当线程需要时直接取走,缩短了创建连接的时间,当使用完毕后,释放连接后放回连接池,以此类推,如果连接池中的连接使用完后,程序会根据配置文件配置的数据再次创建一批,使用完后放回连接池,并不是真正的关闭连接。

C3P0和DHCP对比:

DHCP没有自动回收空闲连接的功能

C3P0有自动回收空闲连接功能

C3P0连接池的重要性:

在Java开发中连接数据库使用到的场景很多,一般我们在项目中每次操作数据库都要建立一次连接,由于JDBC没有保持连接的能力,超时后将会释放连接,每次建立连接大约需要140毫秒左右(取决于计算机性能),这样一来就会发回大量的时间,降低工作效率。如果使用C3P0连接池,直接取走连接大大缩短创建连接的时间。

实例

导入JAR包,有本例子使用的是maven工程,所以只需要导入相应的定位

<!--        mysql驱动-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.17</version>
</dependency>
<!--        junit测试-->
<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency>
<!--        c3p0-->
<dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version>
</dependency>
<!--        log4j日志-->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>

连接类:(不使用配置文件)

package UtillTools;import com.mchange.v2.c3p0.ComboPooledDataSource;import org.junit.Test;import java.beans.PropertyVetoException;import java.sql.Connection;import java.sql.SQLException;public class C3P0Data {/*** 在类里面加载各个参数,不适用配置文件* @throws PropertyVetoException* @throws SQLException*/@Testpublic void getSimpleConnect() throws PropertyVetoException, SQLException {ComboPooledDataSource dataSource = new ComboPooledDataSource();dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/tb_school_system");dataSource.setUser("root");dataSource.setPassword("123456");Connection conn=dataSource.getConnection();System.out.println(conn);conn.close();}}

连接成功如图:

连接类:(实用配置文件)

配置文件c3p0-config.xml必须使用此文件名,否则无法加载

注意:网上有很多说配置文件放到src下面就行,但是作者在使用IDEA(maven工程)测试时并不不行,最后放到resources下才能成功读取。

c3p0-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config><!--默认配置--><default-config><property name="driverClass">com.mysql.cj.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/tb_school_system</property><property name="user">root</property><property name="password">ch92725931125</property><property name="initialPoolSize">10</property><property name="maxIdleTime">30</property><property name="maxPoolSize">100</property><property name="minPoolSize">10</property><property name="maxStatements">200</property><property name="initialPoolSize">10</property><property name="maxIdleTime">30</property><property name="maxPoolSize">100</property><property name="minPoolSize">10</property><property name="maxStatements">200</property></default-config><!--配置连接池mysql--><named-config name="mysql"><property name="driverClass">com.mysql.cj.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/tb_school_system</property><property name="user">root</property><property name="password">ch92725931125</property><property name="initialPoolSize">10</property><property name="maxIdleTime">30</property><property name="maxPoolSize">100</property><property name="minPoolSize">10</property><property name="maxStatements">200</property></named-config><!--配置连接池2-->
<!--    <named-config name="oracle-config">-->
<!--        <property name="driverClass">com.mysql.jdbc.Driver</property>-->
<!--        <property name="jdbcUrl">jdbc:oracle:thin:@地址:端口:ORCL</property>-->
<!--        <property name="user">root</property>-->
<!--        <property name="password">123456</property>-->
<!--        <property name="initialPoolSize">10</property>-->
<!--        <property name="maxIdleTime">30</property>-->
<!--        <property name="maxPoolSize">100</property>-->
<!--        <property name="minPoolSize">10</property>-->
<!--        <property name="maxStatements">200</property>-->
<!--    </named-config>--></c3p0-config>

C3P0连接类

package UtillTools;import com.mchange.v2.c3p0.ComboPooledDataSource;import org.junit.Test;import java.beans.PropertyVetoException;import java.sql.Connection;import java.sql.SQLException;import java.util.logging.Logger;public class C3P0Config {/***     * @throws PropertyVetoException* @throws SQLException*/static Logger logger=Logger.getLogger(C3P0Config.class.getName());
/*加载配置文件中named-config name的值(通过此值来区分配置那一套数据库连接),如果为空则使用xml文件中的default-config
*/static ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");@Testpublic static Connection getMysqlConfigConnect() {try {return dataSource.getConnection();} catch (SQLException e) {e.printStackTrace();}return null;}//释放资源
public static void getCloseConnect(ResultSet res, PreparedStatement pres,Connection conn) {if(res !=null){try {res.close();} catch (SQLException e) {e.printStackTrace();}}if (pres != null){try {pres.close();} catch (SQLException e) {e.printStackTrace();}}if(conn != null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}}
}public static void main(String[] args) {C3P0Config.getMysqlConfigConnect();}}

测试结果:

如有不足请指正,更多资料请关注微信公众号

 请大家多多支持!


http://chatgpt.dhexx.cn/article/J9Pr6QUm.shtml

相关文章

C3P0连接池的配置与使用

一、连接池的作用: 连接池是将已经创建好的连接保存在池中,当有请求来时,直接获取连接池中的有效连接对数据库进行访问,省略了创建连接和销毁连接的过程。这样性能上得到了提高。 基本原理是这样的: (1)建立数据库连接池对象(服务器启动)。 (2)按照事先指定的参数…

java代码c3p0连接池配置,c3p0连接池acquireincrement属性配置详解

一、c3p0数据库连接池介绍 c3p0是应用在Java项目中企业开发中的一个常用的连接池,一般都会配合Java开发框架spring、Hibernate、Mybatis等整合使用,属于开源连接池中性能比较强劲并且受市场比较欢迎的数据库连接池。 之所以项目中会应用连接池,主要是因为我们应用JDBC操作数…

配置springboot使用c3p0连接池

为什么要使用c3p0? 使用springboot默认的数据源配置方式&#xff1a; spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://…

详解C3P0(数据库连接池)

一、基本定义 C3P0是一个开源的JDBC连接池&#xff0c;它实现了数据源与JNDI绑定&#xff0c;支持JDBC3规范和实现了JDBC2的标准扩展说明的Connection和Statement池的DataSources对象。 即将用于连接数据库的连接整合在一起形成一个随取随用的数据库连接池&#xff08;Connecti…

C3P0连接池的使用

C3P0连接池的使用 什么是连接池&#xff1f;C3P0连接池的使用什么是C3P0&#xff1f;环境准备手动配置主要步骤开始编写&#xff01; 采用配置文件的方式主要步骤开始编写&#xff01; 完整代码及运行结果 什么是连接池&#xff1f; 既然叫做池&#xff0c;那么连接池(Connect…

C3P0连接池配置文档

一、导入jar包 下载链接 二、配置文件 配置文件名称&#xff1a;c3p0-config.xml (固定) 配置文件路径&#xff1a;src (类路径) 配置文件内容&#xff1a;命名配置 <c3p0-config><!-- 命名的配置 --><named-config name"test"><!-- 连接数…

C3P0数据库连接池的配置

在pom.xml文件中导入jar包 <dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.5.2</version> </dependency> 在src目录下创建c3p0-config.xml文件 <c3p0-config><named-config …

C3P0连接池的基本配置与使用

上一期我写了一篇Druid连接池的基本配置与使用&#xff0c;今天我要介绍一下C3P0连接池的基本使用。因为是介绍基本使用&#xff0c;所以我打算用一个非常简单的java应用来教大家如何对C3P0连接池进行基本配和使用。所以你只要有jdbc和Java基础就能看懂这篇文章&#xff0c;并学…

Windows API编程(一)最基础的知识介绍:Windows编程基础

主要内容简介&#xff1a; 1. Windows 编程基础&#xff1a;开发环境和开发过程。 2. Windows事件驱动模型和消息机制。 3. Windows的资源&#xff1a;图标、光标、菜单、位图等。 4. Windows绘图&#xff1a;图形和文字的显示。 5. 对话框和控件。 6. 静态库和动态库。 …

通过一个最简单的程序入门Windows编程

一、最简单的程序 我们首先先一个最简单的Windows程序&#xff0c;功能是显示一个消息框&#xff0c;随便提示一些文字就可以了。 看一下代码&#xff1a; #include <Windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, in…

windows编程 线程局部存储(TLS)详解

文章目录 一、基本概念二、基本使用三、例子分析&#xff1a; 总结 一、基本概念 线程局部存储&#xff08;TLS&#xff09;&#xff0c;是一种变量的存储方法&#xff0c;这个变量在它所在的线程内是全局可访问的&#xff0c;但是不能被其他线程访问到&#xff0c;这样就保持…

windows编程入门

记录一下windows编程编写一个消息框&#xff0c;算是学习windows编程的入门级程序吧 以下代码来自&#xff1a;《windows游戏编程大师技巧&#xff08;第二版&#xff09;》 #include<Windows.h> #include<windowsx.h> #include<string> #include<sstre…

Windows编程捕获特定窗口及键盘鼠标消息模拟

Windows编程捕获特定窗口及键盘鼠标消息模拟 一、简介二、使用到的API简介三、获取Windows记事本的编辑区窗口的句柄并模拟输入操作1、分析2、代码一3、代码二 四、后记 一、简介 窗口是Windows的核心组件&#xff0c;Windoows下的绝大部分应用都是利用Windows提供的原生窗口&…

【Windows编程】实时捕捉屏幕

实时捕捉屏幕 主要分为三个部分 获取屏幕 // 两个函数都可以进行位图复制&#xff0c;不过StretchBlt可以按照位图进行拉伸或者压缩 BitBlt(HDC hdc,int x,int y,int cx,int cy,HDC hdcSrc,int x1,int y1,DWORD rop); 或者 StretchBlt(HDC hdcDest,int xDest,int yDest,int …

Windows编程初步(一)

第一节:安装帮助文档 使用C语言进行Windows开发,必然使用到WindowsSDK。Windows SDK指Windows开发人员工具包,是为使用C语言开发Windows程序所提供的工具集。里面提供的工具异常全面丰富,很少有人能全部了解,在开发Windows应用程序时,应同时使用MSDN,即俗称Windows开发…

Windows编程

Windows编程基础 Windows系统级开发&#xff0c;简称Win32 应用程序分类 在Windows这个操作系统平台上&#xff0c;共有三类应用程序控制台程序Console Dos程序&#xff0c;本身没有窗口&#xff0c;通过Windows DOS窗口执行 窗口程序 拥有自己的窗口&#xff0c;可以与用户…

【Windows编程】windows窗口创建过程详解

文章目录 前言1 应用程序的分类2 应用程序分类的对比3 编译工具4 windows库文件和头文件5 WinMain函数和MessageBox函数初始6 窗口类7 窗口类的分类8 注册窗口类函数9 注册窗口类的结构体10 注册全局和局部窗口类11 创建窗口的函数12 创建一个windows的过程步骤13 创建一个子窗…

windows系统编程1——线程和进程

学习视频链接 03进程的创建_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Fd4y1G7Td?p3&vd_source0471cde1c644648fafd07b54e303c905 目录 一、创建线程 二、线程间同步 2.1 线程不同步的结果 2.2 原子操作上锁 2.3 临界区 2.4 内核对象 三、线程间通信…

day01 windows编程入门

文章目录 window编程基本概念Windows常见的数据类型字符串的处理 第一个windows程序的编写 window编程基本概念 Windows编程的本质就是使用好操作系统&#xff0c;想要用好操作系统必不可少的秘籍----MSDN。 Windows编程主要分为两种&#xff1a; 1、控制台编程(CUI) 2、图形界…

10行代码带你入门Windows编程

Windows编程——Hello World 开发工具效果展示源代码主函数主函数参数HINSTANCEhInstanccehPreInstanceLPSTRlpCmdLinenCmdShowMessageBox 小知识 开发工具 Visual Studio 2013 效果展示 源代码 #include <Windows.h> //头文件//主函数 int WINAPI WinMain(HINSTANC…