由于前面在使用JDBC + MySQL出现了tool many connections错误!
下面是JDBC + MySQL使用c3p0连接池的解决方案
public class DBUtils {
private static String url = null;
private static String username = null;
private static String pwd = null;
private static DataSource ds_pooled;
/**
* 加载数据库连接的配置文件和驱动
*/
static{
FileInputStream fis = null;
Properties env = new Properties();
try {
fis = new FileInputStream("dbconfig.properties");
//加载属性文件中的数据库配置信息
//以=左边作为key值,右边作为value值
env.load(fis);
//1. 加载驱动类
Class.forName(env.getProperty("jdbc.driver"));
url = env.getProperty("jdbc.url");
username = env.getProperty("jdbc.username");
pwd = env.getProperty("jdbc.pwd");
//设置连接数据库的配置信息
DataSource ds_unpooled = DataSources
.unpooledDataSource(url, username, pwd);
Map<String, Object> pool_conf = new HashMap<String, Object>();
//设置最大连接数
pool_conf.put("maxPoolSize", 10);
ds_pooled = DataSources.pooledDataSource(ds_unpooled,
pool_conf);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 获取连接对象
*/
public static Connection getConnection() throws SQLException {
// 2. 设置连接的url,username,pwd
// return DriverManager.getConnection(url, username, pwd);
return ds_pooled.getConnection();
}
/**
* 释放连接池资源
*/
public static void clearup(){
if(ds_pooled != null){
try {
DataSources.destroy(ds_pooled);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 资源关闭
*
* @param rs
* @param stmt
* @param conn
*/
public static void close(ResultSet rs, Statement stmt
, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
下面为测试代码:
public class TestMySQLConnection {
private static Integer counter = 0;
public static void main(String[] args){
for (int i = 1; i <= 20; i++) {
new Thread(new Runnable() {
public void run() {
Connection conn = null;
try {
conn = DBUtils.getConnection();
synchronized (counter) {
System.out.print(Thread.currentThread().getName());
System.out.print(" counter = " + counter++
+ " conn = " + conn);
System.out.println();
conn.prepareStatement("select * from t_user");
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}).start();
}
}
}
分享到:
相关推荐
学习“补丁MySQL+JDBC+DBUtil+c3p0史上最全数据库讲义”这个资料,你将深入理解如何在Java应用中设置和使用数据库连接池,如何通过JDBC与MySQL交互,以及如何利用DBUtil简化数据库操作。这将有助于你成为一名更熟练...
C3P0连接池是Java应用中常用的数据库连接池组件,它允许程序在不关闭物理连接的情况下,管理和重用数据库连接,从而提高了应用程序的性能和效率。C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`...
4. **数据访问层**:使用JDBC和c3p0连接池进行数据库操作,执行SQL语句,如增删改查。 5. **配置文件**:如`web.xml`(Web应用部署描述符)、`c3p0-config.xml`(c3p0连接池配置),设置应用的初始化参数和数据库...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要特点包括: 1. **连接测试**:C3P0提供了多种测试策略,确保获取到的连接是可用的。 2. **连接池初始化和最大...
本示例将深入探讨如何在Spring项目中配置并使用C3P0连接池,以实现高效、稳定的数据库连接管理。 **一、Spring框架简介** Spring是一个开源的Java平台,它简化了企业级应用的开发。Spring的核心特性包括依赖注入...
首先,C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,提供了对JDBC3规范和JDBC2的标准扩展的支持。使用C3P0能够有效地管理和重用数据库连接,避免频繁创建和销毁连接导致的性能损耗。 在Tomcat6中配置C3P...
4. 连接池扩展性:C3P0支持多种数据库驱动,如MySQL、Oracle、PostgreSQL等,只需提供对应的JDBC驱动即可使用。 5. 配置灵活性:C3P0提供大量的可配置参数,用户可以根据实际需求调整,例如初始化连接数、最大连接...
c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的主要功能是管理数据库连接,提高数据库访问效率,避免因为频繁创建和销毁数据库连接而造成大量的系统资源浪费。在高...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。C3P0的主要特点是轻量级、高效且稳定,广泛应用于各种Java Web应用中。在本文中,我们将深入探讨C3P0连接池的配置,以便更...
C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。在Java应用程序中,尤其是在Web应用中,使用数据库连接池可以有效地管理和控制数据库连接,提高系统的性能和效率。下面...
Java登录和注册系统是Web应用开发中的基础模块,本案例主要使用了Servlet、MySQL数据库、Tomcat8服务器以及C3P0连接池进行实现。以下将详细解释这些关键组件及其在系统中的作用。 1. **数据库设计**: 数据库采用...
**c3p0连接池配置使用** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。使用c3p0连接池可以有效地管理和优化数据库连接,提高系统的性能和稳定性。下面将详细介绍c3p0的...
c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0由Miquel Delgado开发,其核心功能在于提高了数据库连接的效率和管理,通过池化数据库连接来减少创建和销毁连接的开销...
C3P0是由Mysql AB的开发成员David SYZEN开发的一个开源连接池组件,支持JDBC 3.0和JDBC 4.0规范。 在使用C3P0连接池前,我们需要在项目中引入C3P0的jar包。根据提供的文件名"**c3p0连接池连接数据实例和jar包**",...
C3P0是由Maurice Priess创建的一个开源项目,它旨在提供一个健壮、完全免费的JDBC连接池实现,以解决数据库连接管理的问题,提升系统的性能和稳定性。 ### C3P0基本概念 1. **数据库连接池**:数据库连接池在初始...
C3P0连接池是Java应用中常用的数据库连接池组件,它允许程序管理数据库连接,以提高数据库操作的效率和性能。C3P0库主要包含以下组件:`com.mchange.v2.c3p0.ComboPooledDataSource`,这是核心的数据源类,负责创建...
C3P0是一个开源的Java连接池,全称为Comming Soon Connection Pool,它提供了一种在JDBC数据库连接上的管理机制,以提高应用程序的性能和效率。C3P0是基于JDBC的数据源实现,允许应用程序通过配置参数来优化数据库...
本文将详细介绍三个重要的组件:C3P0连接池、MySQL的JDBC驱动(mysql-connector-java-5.1.37)以及Druid连接池,以及它们在Java中的应用和作用。 首先,C3P0是一个开源的JDBC连接池,全称为ComMchange V2 C3P0。它...