Java开发笔记(一百五十)C3P0连接池的用法

JDBC既制定统一标准兼容了多种数据库,又利用预报告堵上了SQL注入漏洞,照理说已经很完善了,可是人算不如天算,它在性能方面不尽如人意。问题出在数据库连接的管理上,按照正常流程,每次操作完数据库,都要关闭连接,无论是代码里手工关闭,还是由try语句自动关闭。如果没有及时关闭数据库连接,就会长时间占用有限的数据库内存,致使无谓的系统资源浪费。然而频繁开关数据库连接也有毛病,因为每次获取操作都要CPU处理,经常连接数据库会加重CPU的负担。看来内存与CPU像是一对难兄难弟,不管怎么做都会影响其中一个,正所谓鱼与熊掌不可兼得。
其实连接跟线程的情况相似,线程也很头疼频繁创建导致的资源开销,为此Java早早就设计了线程池机制,事先在一个池子中容纳若干线程,需要使用线程时便从中挑一根线程执行任务,任务做完再归还线程,如此实现了线程资源的循环利用,有效提高了系统的整体运行效率。既然线程们组建了线程池这个大家庭,那么连接们能否也组成连接池的大家庭呢?Java固然自带了线程池工具,却未能推出类似的连接池工具,于是各种第三方的连接池蜂拥而起,例如DBCP、C3P0、Proxool等等,其中应用广泛的当数C3P0。
C3P0是一个开源的数据库连接池,它支持JDBC3规范和JDBC2的标准扩展。若要在Java工程中运用C3P0,得先导入它的jar包,比如c3p0-0.9.5.4.jar,同时还要导入该jar包依赖的mchange-commons-java-0.2.16.jar,也就是一共导入两个jar文件。使用C3P0很简单,掌握ComboPooledDataSource类的用法就够了,该类的常见方法说明如下:
setDriverClass:设置连接池的数据库驱动。
setJdbcUrl:设置数据库的连接地址。
setUser:设置数据库的用户名。
setPassword:设置数据库的密码。
setMaxPoolSize:设置连接池大小的上限。
setMinPoolSize:设置连接池大小的下限。
setInitialPoolSize:设置连接池的初始大小。
setMaxStatements:设置报告的最大个数。
setCheckoutTimeout:设置获取连接的等待时间,单位毫秒。当连接池中的所有连接都被占用的时候,新请求想获取连接就必须等待,等待现有连接被释放后才能获取空闲连接。默认为0表示一直等待下去。
setMaxIdleTime:设置最大空闲时间,单位秒。如果某个连接超过该时间仍未使用,则会被自动回收。默认为0表示不判断是否超时,也就是永不回收。
getConnection:从连接池中获取一个连接。
close:关闭连接池。
引入连接池之后,完整的数据库操作流程分解成了两大步骤:初始化连接池、从连接池中取出一个连接处理,下面分别予以介绍。
1、初始化连接池
该步骤首先创建C3P0连接池的对象,再依次调用相关方法设置详细的参数信息,包括数据库驱动、连接地址、用户名、密码,以及与连接池有关的规格参数。下面是初始化C3P0连接池的代码例子:

2、从连接池中取出一个连接处理
除了一开始调用连接池的getConnection获取连接之外,该步骤剩余的操作过程与JDBC原有流程保持一致,即获得数据库连接之后,同样要创建连接的报告,然后命令报告执行SQL语句。下面是通过连接池操作数据库的代码例子:

整合连接池的初始化和具体操作的代码,运行包含整合代码之内的测试程序,观察如下日志可知C3P0连接池正常工作。

Original: https://www.cnblogs.com/pinlantu/p/11525758.html
Author: pinlantu
Title: Java开发笔记(一百五十)C3P0连接池的用法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/574377/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java集合类详解

    集合类的特点:提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变。 Collection:单列(接口) 概述: 是单列集合的顶层接口,表示一组对象,这些对象也成为Cpl…

    Java 2023年6月6日
    089
  • C# 多线程详解 Part.01(UI 线程、子线程)

    什么是进程? 当一个程序开始运行时,它就是一个进程,进程包括运行中的程序和程序所使用到的内存和系统资源。一个进程至少有一个主线程。 什么是线程? 线程是程序中的一个执行流,每个线程…

    Java 2023年5月29日
    068
  • Java实现求质数(素数)

    题目要求: 输出0-100以内的所&#x…

    Java 2023年6月9日
    078
  • java通过command调用openssl生成私钥和证书

    在windows环境下进行的测试,前提条件,windows上需要先安装openssl。 配置环境变量,查看版本: import java.io.*; import java.uti…

    Java 2023年5月29日
    083
  • CSharp: Strategy Pattern

    csharp;gutter:true; /// /// A simple file handlng class /// Strategy Pattern 策略模式 ///20220…

    Java 2023年6月16日
    075
  • Mall谷粒商城(基础篇的开发)

    项目简介 Mall商城项目致力于打造一个完整的大型分布式架构的电商平台,采用先阶段流行的前后端分离模式编写。 Mall商城是一套电商项目,包括前台的商城系统以及后台管理系统,基于S…

    Java 2023年6月5日
    090
  • idea 插件推荐 Translation(翻译插件)

    idea 安装Translation: 我用的 windows idea 2019.1.3不同版本可能会不同 打开idea settings => Plugins 搜索tra…

    Java 2023年6月5日
    097
  • 老徐和阿珍的故事:CAP是什么?超级爱放P吗?

    人物背景:老徐,男,本名徐福贵,从事Java相关研发工作多年,职场老油条,摸鱼小能手,虽然岁数不大但长的比较着急,人称老徐。据说之前炒某币败光了所有家产,甚至现在还有欠债。阿珍,女…

    Java 2023年6月7日
    082
  • redis哨兵模式下主从切换后,php实现自动切换

    redis的哨兵模式,在主服务器挂掉后,会通过选举将对应的从服务器切换为主服务器,以此来达到服务的高可用性。 在业务层面如果主从做了切换可能相对应的服务器IP地址会发生改变,这样会…

    Java 2023年6月8日
    094
  • paoding rose controller包及文件名命名规则

    1.包命名规则:xxx.xxx.controllers(否则扫描不到) 2.文件命名规则 xxx Controller Original: https://www.cnblogs….

    Java 2023年6月6日
    061
  • Nginx中的rewrite指令(break,last,redirect,permanent)

    在server块下,会优先执行rewrite部分,然后才会去匹配location块 server中的rewrite break和last没什么区别,都会去匹配location,所以…

    Java 2023年5月30日
    078
  • nginx的upstream后端名称居然变成了请求的host了?

    问题现象: 今天用nginx做反向代理服务器时,配置upstream后,直接在location里使用,居然发现代理失败, 将upstream的后端名称当做IP(Host)地址使用了…

    Java 2023年5月30日
    098
  • 观察者模式,无需多线程完成数据监听

    大家好,我们今天来了解一个新的设计模式—— 观察者模式。 观察者模式的思路很简单,它被广泛地用在各种数据监控上。很多时候我们希望监听某个数据的变化,希望一旦获悉它的变化之后立即采取…

    Java 2023年5月30日
    091
  • Spring Security 案例实现和执行流程剖析

    在线演示 演示地址:http://139.196.87.48:9002/kitty 用户名:admin 密码:admin Spring Security Spring Securi…

    Java 2023年5月30日
    088
  • day39-网络编程01

    Java网络编程01 1.网络相关的概念 1.1网络通信和网络 *网络通信 概念:两台设备之间通过网络实现数据传输 网络通信:将数据通过网络从一台设备传输到另一台设备 java.n…

    Java 2023年6月15日
    090
  • 深入MySQL(一):MySQL的组织架构

    今天开始将自己所学过的MySQL的知识都尝试融会贯通,并且用写博客的方式记录分享下来。今天讲的主题是 MySQL的组织架构,对于学习一个中间件或者开源项目而言,我觉得最重要的便是先…

    Java 2023年6月7日
    0101
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球