C3P0数据库连接池

目录

一:连接池介绍

1.1连接池解决的问题

 2.常用的数据库连接池

二:c3p0介绍

2.1C3P0介绍:

2.2C3P0快速入门

1.常用参数说明

2.API介绍

3.使用步骤

1.导入jar包c3p0-0.9.1.2.jar  

2.编写c3p0-config.xml配置文件,配置对应参数

3.将配置文件放在src目录下

4.创建连接池对象ComboPooledDataSource,使用默认配置或命名配置  

5.从连接池获取对象

6.使用对象操作数据库,查询表中所有数据并输出到控制台

7.关闭资源

三:使用总结

1.使用事项注意

 2.使用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.xmlComboPooledDataSource dataSource = new ComboPooledDataSource();
5.从连接池获取对象
       //获取连接对象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.关闭资源
     //6)close 归还连接对象到连接池rs.close();stm.close();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库,可以在不同的操作系统和数据库系统上使用,具有良好的跨平台兼容性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/35831.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

node 实现导出, 在导出excel中包含图片(附件)

如果想查看 node mySql 实现数据的导入导出&#xff0c;以及导入批量插入的sql语句&#xff0c;连接如下 node mySql 实现数据的导入导出&#xff0c;以及导入批量插入的sql语句-CSDN博客https://blog.csdn.net/snows_l/article/details/139998373 一、效果如图&#xff1a; 二…

【Linux详解】进程的状态 | 运行 阻塞 挂起 | 僵尸和孤儿状态

目录 操作系统中 运行状态 阻塞状态 进程状态转换 Linux系统中 查看进程状态 深度睡眠状态 T 暂停状态 Z 僵尸状态 孤儿状态 文章手稿 xmind: 引言 介绍系统中的进程状态及其管理方式。将通过结合操作系统原理和实际代码示例&#xff0c;详细说明进程的各种状态、转换…

鸿蒙开发Ability Kit(程序框架服务):【FA模型切换Stage模型指导】 app和deviceConfig的切换

app和deviceConfig的切换 为了便于开发者维护应用级别的属性配置&#xff0c;Stage模型将config.json中的app和deviceConfig标签提取到了app.json5中进行配置&#xff0c;并对部分标签名称进行了修改&#xff0c;具体差异见下表。 表1 配置文件app标签差异对比 配置项FA模型…

Excel中的“点选输入”——次级下拉列表创建

在Excel中&#xff0c;用“数据验证”功能可以设置下拉列表&#xff0c;二级下拉列表需要设置公式。 (笔记模板由python脚本于2024年06月16日 18:36:37创建&#xff0c;本篇笔记适合经常使用Excel处理数据的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;http…

后端之路第三站(Mybatis)——入门配置

一、Mybatis是啥&#xff1f; 就是一个用java来操控数据库的框架语言 之前学的datagrip或者navicat这些软件里我们操作数据库&#xff0c;原理是我们编写完的操作语句发送到服务器传送到数据库系统&#xff0c;然后数据库执行完之后再发送给服务器返回给datagrip或者navicat显…

GPT-5:AI的博士时代与我们的未来

目录 引言第一部分&#xff1a;GPT-5技术突破预测1. NLP技术的革新1.1 算法进步对理解力提升的影响1.2 技术突破推动行业发展 2. 行业推动力2.1 教育行业的变革2.2 医疗行业的创新2.3 法律行业的效率提升 第二部分&#xff1a;智能系统与人类的协作1. 辅助决策的角色1.1 决策支…

游戏AI的创造思路-技术基础-sigmoid函数详解

在前面的机器学习和深度学习的内容中&#xff0c;大量出现了sigmoid函数&#xff0c;所以本篇为大家介绍下sigmoid函数&#xff0c;希望对大家理解前面的算法和后面的Transformer有所帮助 目录 3.8. sigmoid函数 3.8.1. 定义 3.8.2. 性质 3.8.3. 应用 3.8.4. 缺点 3.8.5.…

Flutter实现页面间传参

带参跳转 步骤 在router中配置这个路由需要携带的参数,这里的参数是 arguments,注意要用花括号包裹参数名称 在相应组件中实现带参构造函数 在state类中可以直接使用${widget.arguments}来访问到传递的参数 在其他页面中使用Navigator.pushNamed()带参跳转

2024年最新通信安全员考试题库

61.架设架空光缆&#xff0c;可使用吊板作业的情况是&#xff08;&#xff09;。 A.在2.2/7规格的电杆与墙壁之间的吊线上&#xff0c;吊线高度5m B.在2.2/7规格的墙壁与墙壁之间的吊线上&#xff0c;吊线高度6m C.在2.2/7规格的电杆与电杆之间的吊线上&#xff0c;吊线高度…

[leetcode]24-game

. - 力扣&#xff08;LeetCode&#xff09; class Solution { public:static constexpr int TARGET 24;static constexpr double EPSILON 1e-6;static constexpr int ADD 0, MULTIPLY 1, SUBTRACT 2, DIVIDE 3;bool judgePoint24(vector<int> &nums) {vector&l…

【C++LeetCode】【热题100】三数之和【中等】-不同效率的题解【6】

题目&#xff1a; 暴力方法&#xff1a; class Solution { public:vector<vector<int>> threeSum(vector<int>& nums) {vector<vector<int>> res;std::unordered_set<std::string> uniqueValues;//保证结果唯一for(int i0;i<n…

工商业储能柜用的Acrel-2000ES储能能量管理系统-安科瑞 蒋静

概述 Acrel-2000ES储能能量管理系统&#xff0c;专门针对工商业储能柜、储能集装箱研发的一款储能EMS&#xff0c;具有完善的储能监控与管理功能,涵盖了储能系统设备(PCS、BMS、电表、消防、空调等)的详细信息&#xff0c;实现了数据采集、数据处理、数据存储、数据查询与分析…

PHP米表域名出售管理源码带后台

源码介绍 html5米表源码PHP域名销售程序安装方法&#xff1a; 本站已测试,各项功能正常,功能易用,不复杂,非常适合个人米表使用 1、所有文件传至网站目录 2、浏览器执行http://你的访问网址/install 3、输入mysql帐号及密码信息&#xff0c;提交安装 源码截图 源码下载 …

MySQL程序使用的选项文件

MySQL程序使用的选项文件如下&#xff1a; 显示帮助消息并退出。 在具有多个网络接口的计算机上&#xff0c;使用此选项可以选择用于连接MySQL服务器的接口。 安装字符集的目录。 如果可能&#xff0c;压缩客户端和服务器之间发送的所有信息。 从MySQL 8.0.18开始&#xff0c;…

GPOPS-II教程(3): 航天器最优控制问题

文章目录 问题描述GPOPS代码main functioncontinuous functionendpoint function完整代码代码仿真结果 最后 问题描述 例子出自论文 Direct solution of nonlinear optimal control problems using quasilinearization and Chebyshev polynomials&#xff08;DOI&#xff1a;1…

新手选择代理IP时这几点误区一定要避开!

在选择代理IP时&#xff0c;许多用户可能会因为对代理IP的认识不足或受到一些误导&#xff0c;而陷入一些常见的误区。这些误区不仅可能导致用户无法达到预期的效果&#xff0c;还可能带来一些不必要的风险。下面&#xff0c;IPIDEA代理IP就与大家一同分析在选择代理IP时需要避…

Retrofit类型安全的HTTP客户端库(json)

简介 Retrofit是Square公司开发的一个类型安全的HTTP客户端库&#xff0c;用于Android和Java平台&#xff0c;它使得与Web服务的交互变得更加简单快捷。Retrofit将HTTP API转换成Java接口&#xff0c;让你可以用更简洁的代码形式调用RESTful API&#xff0c;Android网络编程重点…

在前端开发过程中如果函数参数很多,该如何精简

1. 在前端开发过程中如果函数参数很多&#xff0c;该如何精简 1.1. 对象参数&#xff08;对象字面量&#xff09;&#xff1a;1.2. 默认参数和解构赋值&#xff1a;1.3. 使用类或构造函数&#xff1a;1.4. 利用闭包或者高阶函数&#xff1a;1.5. 利用ES6的扩展运算符&#xff1…

Nuxt3 的生命周期和钩子函数(二)

title: Nuxt3 的生命周期和钩子函数&#xff08;二&#xff09; date: 2024/6/26 updated: 2024/6/26 author: cmdragon excerpt: 摘要&#xff1a;本文深入介绍了Nuxt.js框架中几个关键的生命周期钩子函数&#xff0c;包括app:redirected&#xff08;SSR环境下重定向前触发…

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览

20240626让飞凌的OK3588-C开发板在相机使用1080p60分辨率下预览 2024/6/26 15:15 4.2.1 全编译测试 在源码路径内&#xff0c;提供了编译脚本 build.sh&#xff0c;运行该脚本对整个源码进行编译&#xff0c;需要在终端切换到解压 出来的源码路径&#xff0c;找到 build.sh 文件…