数据库连接池的使用

使用c3p0连接池连接数据库时出现:Connections could not be acquired from the underlying database! 当使用c3p0连接数据库时,配置信息都没有错误,但是出现了如下情况: 下列信息中有一行是java.lang.RuntimeException: java.sql.SQLException: Connections could not be acquired from the underlying database! 也就是连接数据库失败 D:\sofeware\JDK8\JDK8installer\bin\java.exe -ea -Didea.test.cyclic.buffer.size=104 阅读详情

什么是数据库连接池?

在进行数据库操作时,使用单个的数据库连接非常的耗费资源和时间,使用数据库连接池可以提高性能。

数据库连接池其实就是一个存放了一定数量的Connection对象的链表,当客户端进行数据库连接时,从链表的第一个位置移除一个连接对象,当用户用完的时候将连接对象重新加入链表的末尾。这样连接池中的连接对象就可以重复使用。



数据源配置步骤:

常用的数据源有两种:

DBCP(Database Connection Pool):


> 添加jar包 commons-dbcp-.x.jar commons-pool-x.jar和mysql-connector-java-xxx-bin.jar

> 添加属性资源文件

driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/day13

#数据库的用户名和密码
username=root
password=wency

#连接池中最开始的连接对象数量
initialSize=10

#最大的连接数
maxActive=50

#最小的连接数
maxIdle=20


minIdle=5

#连接的等待时间
maxWait=60000

> 编写数据源工具类


package com.wency.utils;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

import com.mysql.jdbc.ResultSet;
import com.mysql.jdbc.Statement;



public class DBCPUtils {

	private	static DataSource ds=null;
	
		static{
			Properties pro=new Properties();
			
			try {
				pro.load(DBCPUtils.class.getClassLoader().getResourceAsStream("dbcpconfig.properties"));
				ds=BasicDataSourceFactory.createDataSource(pro);
			} catch (Exception e) {
				// TODO Auto-generated catch block
				throw new ExceptionInInitializerError("配置文件错误");
			}
		}
		
		public static Connection getConnection(){
			try {
				return ds.getConnection();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				throw new ExceptionInInitializerError("服务器繁忙,请稍后访问");
			}
		}
		
		public static void release(Connection conn,PreparedStatement sta,ResultSet rs){
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				conn=null;
			}
			
			if(sta!=null){
				try {
					sta.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				sta=null;
			}
			
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				rs=null;
			}
			
		}
		
		
}

客户端代码:

		Connection conn=null;
		PreparedStatement ps=null;
		
		conn=DBCPUtils.getConnection();
		try {
			ps=conn.prepareStatement("insert into student(name,age) values('wency','22'");
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			DBCPUtils.release(conn, ps, null);
		}

第二种数据源:c3p0

 使用步骤:

1、添加jar包

c3p0-xxx.jar 和mysql-connector-java-xxx-bin.jar

2、编写配置文件

c3p0-config.xml,放在src目录下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
	<property name="driverClass">com.mysql.jdbc.Driver</property>
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/day13</property>
	<property name="user">root</property>
	<property name="password">wency</property>
    <property name="initialPoolSize">10</property>
    <property name="maxIdleTime">30</property>
    <property name="maxPoolSize">100</property>
    <property name="minPoolSize">10</property>

  </default-config>

  

</c3p0-config>


3.编写c3p0工具类

package com.wency.dbutils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import com.mysql.jdbc.ResultSet;


public class C3p0Utils {
	//创建ComboPooledDataSource对象
	private static DataSource dataSource=new ComboPooledDataSource();
	//获取连接的方法
	public static Connection getConnection(){
		try {
			return dataSource.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			throw new RuntimeException("服务器出错");
		}
	}
	//获取数据源
	public  static DataSource getDataSource() {
		return dataSource;
	}
	//释放资源
	public static void release(Connection conn,PreparedStatement prsmt,ResultSet rs){
		if(conn!=null){
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conn=null;
		}
		
		if(prsmt!=null){
			try {
				prsmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			prsmt=null;
		}
		
		if(rs!=null){
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			rs=null;
		}
		
	}
	
	
}


4.调用工具类创建连接

Connection conn=null;
		PreparedStatement ps=null;
		
	
		try {
			conn=C3p0Utils.getConnection();
			ps=conn.prepareStatement("insert into student(name,age) values('wency','22'");
			ps.executeUpdate();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			C3p0Utils.release(conn, ps, null);
		}


JDBC---Druid(德鲁伊)数据库连接池的使用 多种开源的数据库连接池 JDBC 的数据库连接池使用 javax.sql.DataSource 来表示,DataSource 只是一个接口,该接口通常由服务器(Weblogic, WebSphere, Tomcat)提供实现,也有一些开源组织提供实现: DBCP 是Apache提供的数据库连接池。tomcat 服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。 C3P0 是一个开源组织提供的一个数据库连接池,**速度相对较慢,稳定性还可以。**h 阅读详情

相关推荐

麒麟 ARMv10 SP3 安装 Oracle 19c 官方文档 或 教程

在麒麟ARMv10 SP3系统上安装Oracle 19c需要特别注意架构兼容性。

qq_43032338的博客 2941

数据库连接池初使用

数据库连接池的使用

qq_44678438的博客 922

基于gm/id方法的折叠式共源共栅放大器设计实践

本文详细介绍了基于gm/id设计方法进行折叠式共源共栅放大器设计的完整流程。该方法通过确定晶体管的跨导效率(gm/id)作为核心设计参数,将复杂的放大器设计转化为有明确路径的优化问题。文章以设计一个增益80dB、带宽1GHz的两级放大器为例,逐步拆解了从指标分解、关键晶体管工作点选取、到实战仿真与微调的全过程,特别强调了第二级设计对稳定性的影响以及相位裕度的调试技巧。

w8x9y0z1的博客 415

数据库连接池

Mysql数据库是一个C/S模型,通过客户端来访问服务端。底层使用的是TCP协议。当在我们在程序中需要频繁的访问数据库,也就是需要频繁的连接数据库和断开数据库时,会需要频繁的进行上面的操作。在高并发的情况下会消耗很多时间和资源。使用连接池可以减少这部分的消耗。指挥在创建连接池时,建立连接,在销毁连接池对象时,断开连接。需要连接数据库时,在连接池中取出连接,不需要使用数据库时,将连接放会连接池即可。

weixin_57023347的博客 1460

SICK LMS111激光雷达数据解析实战:从原始帧到三维点云的完整流程

本文详细解析了SICK LMS111激光雷达从原始数据帧到三维点云的完整处理流程,包括数据帧结构解析、坐标转换、点云可视化及性能优化技巧。通过实战代码示例,展示了如何高效处理激光雷达数据,并应用于动态物体检测、地面分割等工业场景,为AGV和服务机器人开发者提供实用指南。

garlic的博客 769

Unity3D 2022版如何一键安装Newtonsoft.Json?最新Package Manager教程

本文详细介绍了在Unity3D 2022及以上版本中,如何通过Package Manager一键安装和配置Newtonsoft.Json(Json.NET)。教程涵盖了从打开Package Manager、搜索并安装正确包源,到验证安装和基础使用的完整流程,旨在帮助开发者以现代化、可靠的方式集成这一强大的JSON处理框架,提升开发效率并规避手动导入的常见问题。

lg888的博客 921

SpringBoot中数据库连接池的使用

开发web项目,我们肯定会和数据库打交道,因此就会涉及到数据库链接的问题。在以前我们开发传统的SSM结构的项目时进行数据库链接都是通过JDBC进行数据链接,我们每和数据库打一次交道都需要先获取一次链接,操作完后再关闭链接,这样子效率很低,因此就出现了连接池,用于高效创建并合理分配数据库链接,数据库连接池跟线程池其实也一样的道理。

路漫漫其修远兮,吾将上下而求索 7351

dxf-viewer 查看器

dxf-viewer SDK 的示例,它是一个基于 Three.js 和 Vue3 构建的基于 WebGL 的 BIM 模型查看器。它用于查看 DWG/DXF/PDF 文件。面积测量 - 角度测量 -标记。

qq_25547755的博客 866

数据库的连接池详解

数据库连接池是一种管理和维护数据库连接的机制,用于提高数据库访问的性能和效率。连接池通过在应用程序启动时创建一组数据库连接,并在需要时将这些连接分配给应用程序,然后在不再需要时将其返回到池中。这可以减少创建和销毁数据库连接的开销,并优化数据库资源的使用。连接的创建和销毁开销:创建和销毁数据库连接是一项开销较大的操作。连接池通过预先创建一组连接,避免了每次请求都创建新连接的开销。这些连接在应用程序启动时初始化,并一直保持活动状态,直到应用程序关闭。

liulanba的博客 3428

【问题解决】Python 运行报错 `ModuleNotFoundError` 全网最全解决方案,一文搞定所有导包问题

本文全面解析Python中常见的ModuleNotFoundError和ImportError问题,提供从基础到高级的解决方案。文章首先分析问题原因,包括模块未安装、环境不一致、路径问题等,然后给出7种解决方案:安装缺失模块、检查Python环境、使用虚拟环境、添加搜索路径、相对导入、setup.py安装本地包和使用__init__.py。针对Jupyter Notebook、Docker容器等常见场景提供专门解决方案,并推荐使用requirements.txt、pipenv等预防措施。最后分享调试技巧,帮

博客 916

【Bug已解决】Codex CLI 报 stream disconnected before completion 解决方案

方案适用场景推荐指数更新根证书库社区验证的最常见根因⭐⭐⭐⭐⭐检查系统时间虚拟机/容器等特殊运行环境⭐⭐⭐⭐核对 base_url 配置排除证书问题后的下一步排查⭐⭐⭐⭐更换网络环境测试怀疑本地网络设备存在干扰⭐⭐⭐升级到最新版本已知版本缺陷的场景⭐⭐⭐⭐报错虽然表现形式很像网络连接问题,但社区排查的多个真实案例表明,很大一部分情况的根因其实是本机系统的 TLS 证书信任链异常或系统时间不准确,而不是单纯的网络质量问题。优先检查并更新系统根证书库,这是社区验证过的高频根因。

一键难忘的博客 8021

数据库连接池的理解和使用

一、什么是数据库连接池? 官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。 个人理解:创建数据库连接是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加安全可靠。 二...

不悔的青春 6万+

【2026年华为暑期实习/秋招(AI)-8月5日-第一题- 选择题】(题目+思路+Java&C++&Python解析+在线测试)

摘要: 本文包含20道选择题,涵盖深度学习、数值计算、概率统计、线性代数及机器学习等领域。重点考察了Softmax的数值稳定性实现(减去最大值)、视觉问答任务(图像+问题→答案)、分层强化学习的奖惩计算、欧氏距离与余弦相似度、反向传播梯度计算、SVD降维存储优化、贝叶斯概率推断、插值多项式等。此外,涉及逻辑回归评价指标(不含MSE)、端侧推理内存因素(中间激活)、集中趋势度量(均值)、Householder变换性质、早期停止正则化、梯度矩阵秩与优化、在线学习特性及大模型训练技巧(如学习率预热、梯度裁剪)等知

m0_73659489的博客 192

Django配置连接池:使用django-db-connection-pool配置连接池

django配置mysql连接池,django如何配置mysql连接池,django使用mysql连接池,django配置连接池,配置连接池,数据库连接池,mysql连接池,django配置mysql连接池,如何配置mysql连接池,django实现连接池,django实现mysql连接池

weixin_46371752的博客 3439

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

使用数据库连接池DBConnectionPool时,如果要在一个应用中连接多个数据库,配置文件db.properties怎么配?

今天需要用到数据库连接池,要连接两个数据库,不知道该如何去写配置文件,搜到一篇解决方案,特此转载一下。 真的非常感谢大家的帮助,问题已经解决了! 我现在把解决的方法写出来大体上与139129(百事) 相同。 我用的db.properties文件: driver=oracle.jdbc.driver.OracleDriver org.gjt.mm.mysql.Driver soft.url=jdbc:mysql://21.80.66.253/soft soft.user=root soft.password=

qq_37786081的博客 994

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

关于eclipse数据库连接池封装使用

创建一个文件,在src目录下,文件名为&quot;db.properties&quot; 文件中以键值对形式记录,地址(url),数据库名(username),数据库密码(username) 连接池最大数(MaxPoolSize),连接池最小数(MinPoolSize),初始化连接池连接数量( initialPoolSize),当连接池用完时客户端调用getConnection()后等待获取新连接的时间 ,超时后...

__盛某人的博客 720

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jsp获取连接池的实时连接数_详解!这样的优化系统操作你会吗?连接池技术原理与实现

背景在服务访问的过程中,每一次请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都要花费大约0.05s~1s的时间,而且系统还要分配内存资源。 这个时间对于一次或几次数据库操作,或许感觉不出系统有太大的开销。可是对于现在的web应用,存在许多高并发服务,同时有上千上万或更多的并发请求。 在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服...

weixin_39532754的博客 101

特斯拉接入 Home Assistant 实战:从 refresh token 到分享你的第一个特斯拉自动化

定好闹钟出门,上车才发现车里晒了一整夜。如果 Home Assistant 已经在家里跑着,这就是个该在家解决的题目。文章要讲的 Tesla Custom Integration 是一个社区维护的特斯拉集成:它拿 refresh token 登录特斯拉云端,把你的车变成智能家居系统里的一组可调用实体。Home Assistant 原生的 Tesla 集成因为特斯拉登录机制变更早已不可用,这个项目是

gitblog_01046的博客 224

Spring 使用C3P0数据库连接池

在所有的实际工作之中,之前使用的"DriverManagerDataSource"类是不会被使用的,因为这种的数据源的处理操作使用的是传统的JDBC方式处理,也就是所它每次操作的时候都需要自己连接数据库,而后还需要关闭数据库,性能太差了,所以在实际的工作上我们都会使用数据库连接池来负责数据库连接的管理,但是在JSP的时候学习过Tomcat下配置连接池,只不过这种连接池有一个问题,它必须有Tomca...

抛弃幻想,准备斗争 497

Java 中使用数据库连接池

HikariCP:高性能、轻量,推荐用于大多数现代应用。Apache DBCP:功能齐全,成熟稳定,适用于很多企业应用。C3P0:老牌连接池,适用于对性能要求不高的应用。如果你使用 Spring Boot,推荐使用HikariCP,因为它是 Spring Boot 默认的连接池,性能好且配置简单。如果你在使用 Spring 或 Spring Boot,可以通过 application.properties 或 application.yml 文件进行配置,而不必显式地在代码中配置连接池。

哟,你又在偷偷写bug! 1071

【java web篇】数据库连接池Driud的使用

Druid是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0、DBCP、PROXOOL等DB池的优点,同时加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池!

阿牛的博客 1088

Laravel 如何使用数据库连接池提高性能

Swoole MySQL Proxy SMProxy文档地址 一个基于 MySQL 协议,Swoole 开发的MySQL数据库连接池。 原理 将数据库连接作为对象存储在内存中,当用户需要访问数据库时,首次会建立连接,后面并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。 使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。 同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数

weixin_45310179的博客 3110

mybatis默认会使用连接池吗_详解!这样的优化系统操作你会吗?连接池技术原理与实现...

背景在服务访问的过程中,每一次请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都要花费大约0.05s~1s的时间,而且系统还要分配内存资源。 这个时间对于一次或几次数据库操作,或许感觉不出系统有太大的开销。可是对于现在的web应用,存在许多高并发服务,同时有上千上万或更多的并发请求。 在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服...

weixin_39639568的博客 1200

C3P0数据库连接池的使用工具和使用数据库连接池来进行查询操作

/**  *C3P0数据库连接池的使用工具  */ import java.beans.PropertyVetoException; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3POUtils { public static ComboPooledDataSource cpds=nul

zhyzh134的博客 3240

JDBC数据库连接池的使用

如果使用C3P0数据库连接池,配置文件为c3p0-config.xml,注意该文件必须放在src文件夹下,并且只能使用该名称。如果使用druid数据库连接池,配置文件为druid.properties,注意该文件可以使用任意名称和存放在任意位置,但是一般存放在src文件夹下,并且使用druid命名。...

wopoli的博客 2001

什么是数据库连接池?为什么需要使用连接池?

数据库连接池是一种创建和管理数据库连接的技术。在传统的应用程序中,每当需要与数据库进行交互时,都会创建一个新的数据库连接。这种做法虽然简单,但在高并发场景下效率低下且资源消耗大。每次创建和销毁连接都需要耗费一定的时间和系统资源,特别是当连接数较多时,这将严重影响系统的性能。数据库连接池通过预先创建一组数据库连接,并将其保存在一个“池”中,供应用程序重复使用。当应用程序需要访问数据库时,可以从连接池中获取一个已存在的连接;完成操作后,再将该连接归还给池中,而不是直接关闭它。

程序员学习园地。 749
上一篇: 利用cookie实现查看最近浏览
下一篇: DBUtils的使用.
codelady
博客等级 码龄11年 26粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值