C3P0 连接池获取的connection执行close() 方法是释放资源销毁连接还是释放资源归还连接至连接池?

如果你只是想要一个答案的话,可以很明确的说: 连接池的连接对象在执行clos()方法之后, 是将资源释放出来但连接不被销毁,而是重新回到C3P0 连接池中以重复使用

代码演示如下:

## 一:C3P0 的硬编码方式演示

package com.Demo_c3p0使用_硬编码;import com.mchange.v2.c3p0.ComboPooledDataSource;import java.sql.Connection;import java.sql.PreparedStatement;
import java.sql.ResultSet;public class Hard_Coding {public static void main(String[] args) throws Exception {/*** 1. 拷贝jar包;* 2. 创建c3p0连接池对象;* 3. 获取连接对象;* 4. 预编译sql,获取预编译对象;* 5. 定义sql参数类型;* 6. 执行sql,处理结果;* 7. 释放资源(资源被释放后,连接被归还给连接池中,而不是像常规连接一样被销毁)*/
//        创建c3p0 连接池对象;ComboPooledDataSource cps = new ComboPooledDataSource();
//        定义连接属性cps.setDriverClass("com.mysql.jdbc.Driver");cps.setJdbcUrl("jdbc:mysql://localhost:3306/mydb1");cps.setUser("root");cps.setPassword("1234");
//        定义连接池中的初始连接数 (连接池连接数最小min为 3)cps.setInitialPoolSize(3);
//        获取连接对象;Connection connection = cps.getConnection();
//        预编译sql 及获取预编译对象String sql = "select * from exam where math in (?,?,?);";PreparedStatement ps = connection.prepareStatement(sql);ps.setInt(1, 89);ps.setInt(2, 85);ps.setInt(3, 91);
//        执行sql,处理结果;ResultSet resultSet = ps.executeQuery();while (resultSet.next()) {int id = resultSet.getInt("id");String name = resultSet.getString("name");int chinese = resultSet.getInt("chinese");int math = resultSet.getInt("math");int english = resultSet.getInt("english");System.out.println(id + " " + name + " " + chinese + " " + math + " " + english);}System.out.println("被占用的连接数: " + cps.getNumBusyConnections());System.out.println("连接池中的总连接数:" + cps.getNumConnections());resultSet.close();ps.close();connection.close();Thread.sleep(60000);System.out.println("被占用的连接数: " + cps.getNumBusyConnections());System.out.println("连接池中的总连接数:" + cps.getNumConnections());}
}

执行结果如下:

值得一提的是,
如果将释放资源的代码注释掉, 可以发现

        System.out.println("被占用的连接数: " + cps.getNumBusyConnections());System.out.println("连接池中的总连接数:" + cps.getNumConnections());/*       resultSet.close();ps.close();connection.close();*/Thread.sleep(6000);System.out.println("被占用的连接数: " + cps.getNumBusyConnections());System.out.println("连接池中的总连接数:" + cps.getNumConnections());

那么执行结果:将资源释放代码注释掉后,即使DQL 执行完毕,连接也没有被释放

## 二:C3P0 的配置文件c3p0-config.xml 的使用方式

 C3P0 的硬编码模式和通过配置文件的方式没有什么区别,配置文件的方式只是将连接的属性包装在了一个文件中,在项目其他文件需要的时候能够通过其他方式(如Dom4j 类)将配置引入。c3p0-config.xml 默认需要放在当前模块代码的src 目录下, 以供c3p0 在创建连接池的时候进行数据库相关参数数据的获取。

c3p0-config.xml 文件配置:

<!--c3p0-config.xml 文件格式内容如下,如果需要其他的参数,例如重连次数、日志输出等 -->
<c3p0-config><default-config><property name="driverClass">com.mysql.jdbc.Driver</property><property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb1</property><property name="user">root</property><property name="password">1234</property><property name="initialPoolSize">6</property></default-config>
</c3p0-config>

执行结果:同硬编码方式。资源释放后,连接归还连接池。

注掉释放资源的代码后,可以发现被占用的连接不会得到释放。

C3P0 连接池获取的connection执行close() 方法是销毁连接还是释放资源归还连接至连接池?相关推荐

  1. 获取当前正在执行的方法的名称

    本文翻译自:Getting the name of the currently executing method 有没有办法在Java中获取当前正在执行的方法的名称? #1楼 参考:https://s ...

  2. 【EventBus】EventBus 源码解析 ( 事件发送 | 线程池中执行订阅方法 )

    文章目录 一.EventBus 中主线程支持类 二.EventBus 中 AsyncPoster 分析 三.AsyncPoster 线程池 Runnable 任务类 一.EventBus 中主线程支持 ...

  3. 解决SSH连接出现 Software caused connection abort 的问题

    解决SSH连接出现 Software caused connection abort 的问题 参考文章: (1)解决SSH连接出现 Software caused connection abort 的 ...

  4. 线程池的参数及执行顺序

    线程池的优点 降低系统资源消耗,通过复用已存在的线程,降低线程创建和销毁造成的开销: 提高系统响应速度,当有任务到达时,通过复用已存在的线程,无需等待新线程创建便立即能够执行. 方便线程并发数的管控, ...

  5. 关于MySQL连接Navicat Premium 12失败的解决方法

    关于MySQL连接Navicat Premium 12失败的解决方法 参考文章: (1)关于MySQL连接Navicat Premium 12失败的解决方法 (2)https://www.cnblog ...

  6. MongoDB compass 连接不上远程服务器的解决方法

    MongoDB compass 连接不上远程服务器的解决方法 参考文章: (1)MongoDB compass 连接不上远程服务器的解决方法 (2)https://www.cnblogs.com/li ...

  7. 恐怖黎明 加入好友的服务器显示不匹配,恐怖黎明连接不到好友怎么办_一直连接不到特定好友游戏解决方法分享_3DM单机...

    <恐怖黎明>中一些玩家想要和好友一起游戏,却一直搜索不到好友的房间,不能加入游戏,下边就给大家带来"落雷兽"分享的一直连接不到特定好友游戏解决方法,大家可以来看一看. ...

  8. 计算机显示连接到多重网络,win7系统网络连接后出现多重网络的解决方法

    很多小伙伴都遇到过win7系统网络连接后出现多重网络的困惑吧,一些朋友看过网上零散的win7系统网络连接后出现多重网络的处理方法,并没有完完全全明白win7系统网络连接后出现多重网络是如何解决的,今天 ...

  9. mysql getconnection 如何关闭连接_【MySQL】使用连接池获取Connection执行sql以及mybatis事务注意事项...

    注意: 使用DataSourceUtils.getConnection(dataSource);方式获取连接,而不是dataSource.getConnection(). dataSource.get ...

最新文章

  1. hdu3635 Dragon Balls(带权并查集)
  2. 合成孔径成像算法与实现_声呐二维成像技术
  3. mysql-proxy安装包_Mysql-proxy安装
  4. [C++调试笔记]define.h
  5. JZOJ 5401. 【NOIP2017提高A组模拟10.8】Star Way To Heaven
  6. 基于Native Client的编程框架
  7. 第二章 物理层 2,3 数据通信基础知识 [计算机网络笔记]
  8. youcans 的 OpenCV 学习课—5.图像的几何变换
  9. 大一计算机专业,大一计算机专业学生
  10. php 向上取整_PHP取整方法小总结
  11. LVS详解(三)——LVS算法简介
  12. Nginx重启时丢失nginx.pid文件
  13. Javascript中的Trait与代码重用
  14. wireshark 查找内容
  15. 面试题:如果要画一只鸟和一个人,你会如何构图?
  16. C语言实现分钟转换年和天
  17. 3点内容介绍什么是物联网模组
  18. _variant_t与其他数据类型的转换
  19. K-Net 论文笔记
  20. loadrunner破解以及超级license

热门文章

  1. 2023年最新程序员接单平台汇总
  2. 2022.06.06-2022.06.12
  3. 【笑话】悟空评职称记
  4. ~《概率论》~ 随机变量函数及分布
  5. 如何改变对话框的背景颜色
  6. js创建节点、添加节点
  7. Mac 查看端口被哪个进程号占用
  8. 专访微软亚洲研究院首席研发经理邹欣:AI 时代程序员将往哪走?
  9. 如何一分钟记住23种设计模式
  10. oracle完整的新建用户,oracle新建用户