什么是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();}}

测试结果:

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

请大家多多支持!

Java使用C3P0连接池详解相关推荐

  1. Java多线程之线程池详解

    Java多线程之线程池详解 目录: 线程池使用及优势 线程池3个常用方式 线程池7大参数深入介绍 线程池底层工作原理 1. 线程池使用及优势 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务 ...

  2. python requests 异步调用_构建高效的python requests长连接池详解

    前文: 最近在搞全网的CDN刷新系统,在性能调优时遇到了requests长连接的一个问题,以前关注过长连接太多造成浪费的问题,但因为系统都是分布式扩展的,针对这种各别问题就懒得改动了. 现在开发的缓存 ...

  3. Spring Boot 使用 Druid 连接池详解

    Spring Boot 使用 Druid 连接池详解 Alibaba Druid 是一个 JDBC 组件库,包含数据库连接池.SQL Parser 等组件,被大量业务和技术产品使用或集成,经历过严苛的 ...

  4. java连接池详解与自定义es连接池

    目录 1 版本选择 2 依赖选择 3 使用commons-pool构造连接池 3.1 pom.xml 3.2 对象池类 GenericObjectPool普通对象池 GenericKeyedObjec ...

  5. java 线程与线程池详解

    并发:同一时刻,多任务交替执行,造成一种"貌似同时"的错觉.简言之,单核cpu实现的多任务就是并发. 并行:同一时刻,多任务同时执行.多核cpu可实现并行. 在创建线程时,可以使用 ...

  6. Java使用Jco连接sap详解

    SAP的R/3系统与Java平台一样有着许多类似的技术理念,以及同样广泛的企业级用户,但是它们完全是两个不同的世界.当用户面临流程 或者数据整合方面的需求的时候,就迫切需要一种高效的方式,在R/3系统 ...

  7. jedis连接池详解(Redis)

    转自:http://tianxingzhe.blog.51cto.com/3390077/1684306 原子性(atomicity): 一个事务是一个不可分割的最小工作单位,事务中包括的诸操作要么都 ...

  8. Redis Lettuce客户端异步连接池详解

    前言 异步/非阻塞编程模型需要非阻塞API才能获得Redis连接.阻塞的连接池很容易导致阻塞事件循环并阻止您的应用程序进行处理的状态.Lettuce带有异步,非阻塞池实现,可与Lettuces异步连接 ...

  9. Hyperf连接池详解

    开头语 Hyperf官网介绍了为什么要使用连接池及连接池的简单案例,但是对新手却不太友好,不过我还是想基于官方文档,来做一篇更深的讲解. 先来看看官方文档对于连接池的介绍 为什么要使用连接池 当并发量 ...

  10. Mysql连接池详解——原理部分

    引言 为什么要使用连接池 线程池如何配合连接池使用, 连接池和线程池数量 不能根据经验值直接设置,需要根据io同步的具体时间去测试得到最优的值 同步连接池和异步连接池的区别 连接池的扩展 一.池化技术 ...

最新文章

  1. QIIME 2教程. 10数据导出ExportingData(2021.2)
  2. Help Johnny-(类似杭电acm3568题)
  3. 交换机VLAN划分详细手册
  4. myeclipse中,项目上有个叉报错,文件没有错误
  5. 苹果依旧强大 物联网领域举足轻重
  6. Tengine(Nginx)动静分离简要配置
  7. nginx日志中$request_time时间异常问题排查
  8. android 刷新标题栏,Android 自定义标题栏的实例详解
  9. 我的2015plan
  10. 异步编程之co——源码分析
  11. 《机器学习算法竞赛实战》学习笔记1.竞赛简介
  12. pgAdmin III 使用图解
  13. 全国大学生智能汽车竞赛山东省赛区获奖队伍信息
  14. 【每日一练】JS基础选择题
  15. 三菱模拟量fx3u4da_三菱模拟量输入模块FX3U-4AD与FX3U-4AD-ADP的区别
  16. [飞控]如何学习无人机-入门篇
  17. java中静态方法与非静态方法的区别及非静态方法的注意事项
  18. Uniapp|image无法显示图片
  19. iOS总体框架介绍和详尽说明
  20. mysql免安装版用法

热门文章

  1. JavaWeb图书管理系统.rar(毕业设计(论文)+毕业设计指导书+大学毕业设计任务书+图书管理系统+毕业论文答辩)
  2. VSCode修改字体的方法
  3. 修改vscode代码字体大小
  4. 软件工程题库(荟萃)
  5. 离散数学(五)上课复习笔记(无向图的连通性、有向图、欧拉图、哈密顿图、二部图、平面图)
  6. c语言刷屏函数的作用是什么,刷屏神器源码(C语言控制台版)【原创】
  7. DevExpress中使用ChartControl绘制折线图和导出图表为Excel文件
  8. 反激式开关电源电路测试记录(二)
  9. 基于MDK编译器 STM32与12864液晶显示程序 和电路连接
  10. 《遗传算法原理及应用》笔记—绪论