热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

C3P0连接池获取的connection执行close()方法是释放资源销毁连接还是释放资源归还连接至连接池?如果你只是想要一个答案的话,可以很明确的

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 执行完毕,连接也没有被释放](https://img-blog.csdnimg.cn/20210310180501373.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDc2NjM2OA==,size_16,color_FFFFFF,t_70

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

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

c3p0-config.xml 文件配置:

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

执行结果&#xff1a;同硬编码方式。资源释放后&#xff0c;连接归还连接池。
在执行资源释放后&#xff0c; 获取连接池中的连接数
注掉释放资源的代码后&#xff0c;可以发现被占用的连接不会得到释放。
在这里插入图片描述


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
author-avatar
一个关于摄影的家伙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有