c3p0的配置及简单应用
首先简单了解一下JDBC和c3p0
Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们通常说的JDBC是面向关系型数据库的。
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。目前使用它的开源项目有Hibernate、Spring等。
在JDBC项目中,如果需要多个连接,如果一直获取连接再断开连接,会造成资源的极大浪费和占用。而在c3p0项目中,c3p0它有一个数据库池是用来管理客户端和数据库连接(Connection),有了这个池我们就不用自己来创建Connection,也不用担心频繁的连接断开操作造成的系统资源浪费很大,通过池来获取Connection对象,当使用完后,进行的资源释放c3po_utils.release(rs,conn,pstm)并不是直接把进程直接关掉,而是把从连接池占用的资源又还回去给池。
配置c3p0
首先
下载官网c3p0:https://sourceforge.net/projects/c3p0/
打开下载好的c3p0文件夹下的lib目录,可以看到c3p0-0.9.5.5.jar和mchange-commons-java-0.2.19.jar两个jar包

这里以IDEA为例

第二步,成功导入包后,我们配置一下c3p0的配置文件,c3p0不在properties文件中配置,而是在xml中配置
在src下新建c3p0_config.xml文件

在新建好的c3p0_config.xml中加入配置
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- 默认配置,如果没有指定则使用这个配置 -->
<default-config>
//以下是数据库用户名、密码、被操作的数据表名地址、驱动类
<property name="user">root</property>
<property name="password">root</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/users</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
//最大连接数、最小连接数、一次增长个数、初始可连接数
<property name="maxPoolSize">100</property>
<property name="minPoolSize">2</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">3</property>
//最大等待连接时间、空闲连接测试个数、最大空闲时间、最大预缓存数
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="maxIdleTime">30</property>
<property name="maxStatements">200</property>
</default-config> <!-- 命名的配置,可以通过方法调用实现 -->
<named-config name="Mysql">
<property name="user">root</property>
<property name="password">root</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/users?useUnicode=true&characterEncodeing=utf8&useSSL=true</property>
<property name="driverClass">com.mysql.jdbc.Driver</property> <!-- 如果池中数据连接不够时一次增长多少个 -->
<property name="acquireIncrement">5</property> <!-- 初始化数据库连接池时连接的数量 -->
<property name="initialPoolSize">20</property> <!-- 数据库连接池中的最大的数据库连接数 -->
<property name="maxPoolSize">25</property> <!-- 数据库连接池中的最小的数据库连接数 -->
<property name="minPoolSize">5</property>
</named-config>
</c3p0-config>
编写c3p0工具类utils
package com.lsq.Utils_Study.Utils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class c3p0_Utils {
public static DataSource dataSource = null; static {
try {
//创建数据源工厂模式
dataSource = new ComboPooledDataSource("Mysql");//配置文件写法
}catch (Exception e){
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() throws SQLException{
return dataSource.getConnection();//从数据源中获取连接
}
//释放系统资源
public static void release(ResultSet rs, Connection conn, PreparedStatement pstm){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstm!=null){
try {
pstm.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
测试c3p0连接是否成功
package com.lsq; import com.lsq.Utils_Study.Utils.c3p0_Utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class c3p0_test {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstm = null;
ResultSet rs = null; try {
conn = c3p0_Utils.getConnection();
String sql = "select * from users where id=?";
pstm = conn.prepareStatement(sql);
pstm.setInt(1,1);
rs = pstm.executeQuery();
if (rs.next()){
System.out.println("查询成功");
System.out.println(rs.getString("NAME"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
c3p0_Utils.release(rs,conn,pstm);
}
}
}
c3p0的配置及简单应用的更多相关文章
- Win8.1下FreeImage.lib库的配置和简单使用(转)
转自http://www.codeweblog.com/win8-1下freeimage-lib库的配置和简单使用/ 首先,你可以从这里获取FreeImage的完整库文件(访问密码 9a5e). 配置 ...
- c3p0详细配置
c3p0详细配置 官方文档 : http://www.mchange.com/projects/c3p0/index.html <c3p0-config> <default-conf ...
- 开源IDE CodeBlocks的下载安装、配置、简单编程
如果没有集成开发环境(IDE),在linux下开发程序将非常繁琐,IDE是指将编辑.编译.调试等功能集成在一个桌面环境上,这样就大大方便了用户.IDE一般包括代码编辑器.编译器.调试器和图形界面用户工 ...
- Solr配置与简单Demo[转]
Solr配置与简单Demo 简介: solr是基于Lucene Java搜索库的企业级全文搜索引擎,目前是apache的一个项目.它的官方网址在http://lucene.apache.org/sol ...
- log4net日志的配置及简单应用
在程序运行中,往往会出现各种出乎开发人员意料的异常或者错误,所以,记录详细的程序运行日志信息,有利于开发人员和运维人员排查异常信息,提高工作效率.而本菜鸟在大神推荐和指导下使用log4net这一插件工 ...
- CodeBlocks的下载安装、配置、简单编程
CodeBlocks的下载安装.配置.简单编程 IDE简介 http://www.baidu.com/s?wd=codeblocks ,这里只是介绍Windows平台下的IDE环境配置. CodeBl ...
- asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程
最近在学习张善友老师的NanoFabric 框架的时了解到Exceptionless : https://exceptionless.com/ !因此学习了一下这个开源框架!下面对Exceptionl ...
- go语言的安装、环境变量配置及简单使用
go语言的安装.环境变量配置及简单使用 1.安装git并且配置在path中,默认就勾选了 下载地址https://git-scm.com/download/win 2.下载安装visualstudio ...
- ssdb主从及双主模型配置和简单管理
ssdb主从及双主模型配置和简单管理 levelDB是一个key->value 的数据存储库,其只能在本地保存数据,支持持久化,并且支持保存非常大的数据,单机redis在保存较大数据的时候数十G ...
- InteliiJ IDEA的安装配置与简单使用
小Alan前段时间一直在家里搬砖,已经很久没有接触技术了,从今天开始重拾技术,工欲善其事,必先利其器,以前在做Java开发的时候最常用的IDE就是Eclipse莫属了,不过随着岁月的流逝,在2016年 ...
随机推荐
- 远程云服务器上docker安装redis的过程
首先明确一点,云服务环境你已经安装好了docker 1.进入docker hub官网查看你所需要的redis的版本信息 https://registry.hub.docker.com/
- BL808:【M1s DOCK开发板】与LVGL 使用体验
前言 念春时已夏,恋冬雪已融. 总是感叹时光匆匆,便努力在在平凡中挣扎,在平庸中努力,在平淡中积累.奈何时代飞速发展,时间又被工作占用,外加生活中的诱惑又太多了,很多想学.想做.想超越的事,都被抛之一 ...
- C++温故补缺(十九):atomic类
atomic 参考:c++11 多线程(3)atomic 总结 - 简书.c++11 atomic Npgw的博客.C++11 并发指南系列 - Haippy - 博客园. atomic_flag a ...
- 记一次 .NET 某医疗住院系统 崩溃分析
一:背景 1. 讲故事 最近收到了两起程序崩溃的dump,查了下都是经典的 double free 造成的,蛮有意思,这里就抽一篇出来分享一下经验供后面的学习者避坑吧. 二:WinDbg 分析 1. ...
- 改善与提高linux系统的音质
当初装Linux系统的时候,我就发现了,deepin和ubuntu的linux平台音质和Windows平台下的音质不一样.硬件参数没变,歌曲音频文件相同的情况下,linux播放歌曲的时候动态和音乐细节 ...
- MySQL8.0 创建用户及授权 - 看这篇就足够了
什么时候会用到 对接外系统时,需要给其余系统开放访问权限 本系统中,分权限管理数据,防止root权限删库跑路 mysql版本 MySql8.0+ 具体步骤 1.命令行进入MySql 使用 mysql ...
- golang pprof监控系列(2) —— memory,block,mutex 使用
golang pprof监控系列(2) -- memory,block,mutex 使用 大家好,我是蓝胖子. profile的中文被翻译轮廓,对于计算机程序而言,抛开业务逻辑不谈,它的轮廓是是啥呢? ...
- 部署:keepalived-1.3.5+MHA部署mysql集群
MHA: MHA工作原理总结为以下几条: 从宕机崩溃的master保存二进制日志事件(binlog events): 识别含有最新更新的slave: 应用差异的中继日志(relay log)到其他sl ...
- nlp数据预处理:词库、词典与语料库
在nlp的数据预处理中,我们通常需要根据原始数据集做出如题目所示的三种结构.但是新手(我自己)常常会感到混乱,因此特意整理一下 1.词库 词库是最先需要处理出的数据形式,即将原数据集按空格分词或者使用 ...
- DeFi-DEX-借贷
不知道为什么上课的笔记没保存上55555 看看ppt和视频吧(