`
daiming253685
  • 浏览: 23551 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

使用XML配置c3p0数据库连接池

阅读更多

想通过JDBC来配置c3p0数据库连接池,上网想找到解析工具没有找到,只要自己写了一个,可以读取在根目录下的
c3p0配置文档,再根据配置信息来反射ComboPooledDataSource ,中的setter,进行连接池的配置。
本人水平很菜,如果有什么不足请大家指出。

 

package cn.vagasnail.sgms.util;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * 得到c3p0的数据库连接池
 * 
 * @author vagasnail
 * 
 * 2009-3-26 下午07:54:10
 */
public class C3p0ConnectionFactory {
	private C3p0ConnectionFactory() {
	}

	private static ComboPooledDataSource ds = null;
	static {
		Map<String, String> configs = C3p0XMLParser
				.parserXML("c3p0-config.xml"); // 得到一个map包含配置信息
		ds = new ComboPooledDataSource(); // 得到一个数据库连接池数据源
		Method[] fs = ComboPooledDataSource.class.getMethods(); // 得到该数据库连接池数据源的所以方法信息
		Pattern pattern = Pattern.compile("get([A-Z]\\w+)()");
		for (Method m : fs) {
			Matcher matcher = pattern.matcher(m.getName());
			String str = "";
			String strLow = "";
			if (matcher.find()) {
				str = matcher.group(1);
				char c = str.charAt(0);
				strLow = Character.toLowerCase(c) + str.substring(1);
			}

			try {
				String value = configs.get(strLow);
				int intValue = 0;
				Method setMod  = null;
				if (value != null && !"".equals(value)){
				try{
					intValue = Integer.parseInt(value);
					 setMod = ComboPooledDataSource.class.getMethod("set"
							+ str, int.class);  //如果反射的方法中是int类型,而不是包装类Interger,那么无法反射到该犯法,反射调用方法无法自动解包
                       if(setMod != null)
						setMod.invoke(ds, intValue);
                       
		
				}catch(NumberFormatException nfe){
					setMod = ComboPooledDataSource.class.getMethod("set"
							+ str, String.class);
					if(setMod != null)
					setMod.invoke(ds, value);
				}
				}else
					continue;
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (NoSuchMethodException e) {
				// e.printStackTrace(); //如果方法不存在则继续下面的循环
				continue;
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
			
	
			
		}
		
		login(configs);
	}
	
	private static void login(Map<String, String> configs){	
		ds.setUser(configs.get("user"));
		ds.setPassword(configs.get("password"));
		
	}

	/**
	 * 得到一个数据库连接
	 * 
	 * @return 数据库连接
	 */
	public static synchronized Connection getConnection() {

		Connection con = null;
		try {
			con = ds.getConnection();
		} catch (SQLException e1) {
			e1.printStackTrace();
		}
		return con;
	}
/**
 * 关闭数据库(并没有真正的关闭,连接池把连接存储起来下一次调用的时候还可以使用)
 * @param conn
 * @throws SQLException 
 *//*
	public static synchronized void close(Connection conn) {
		if (conn != null) {
			try {
				conn.close();
				conn = null;
			} catch (SQLException e) {
				e.printStackTrace();
				return;
			}
		}

	}*/
	
	public static int getCurrentConns() throws SQLException{
		return ds.getNumConnectionsAllUsers();
	}

}

 

分享到:
评论
2 楼 daiming253685 2009-04-01  
stevensinclair 写道

啥对啥?!

我还不是很会使用javaeye提供的功能 
1 楼 stevensinclair 2009-03-31  
啥对啥?!

相关推荐

    c3p0数据库连接池

    **c3p0数据库连接池详解** c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0的主要功能是管理数据库连接,通过复用已存在的连接来提高数据库访问效率,减少系统资源...

    java中c3p0数据库连接池使用方法(c3p0-config.xml+c3p0-0.9.2-pre1.jar+JdbcPool_c3p0.java)

    java中c3p0数据库连接池使用方法(c3p0-config.xml+c3p0-0.9.2-pre1.jar+JdbcPool_c3p0.java),里面包含了c3p0-0.9.2-pre1.jar、以及配置文件:c3p0-config.xml、以及一个c3p0数据库连接池工具类(只有简单的两个方法...

    c3p0数据库连接池案例

    总的来说,c3p0数据库连接池案例提供了一个完整的示例,涵盖了从配置到使用的全过程,有助于加深对数据库连接池概念的理解,并提升你在Java项目中的数据库管理能力。通过实践这个案例,你可以掌握如何更高效、更稳定...

    c3p0数据库连接池架包及源码

    在实际开发中,可以结合Spring框架使用C3P0,通过XML配置或注解方式将C3P0集成到Spring的事务管理中,简化数据库连接池的管理和使用。 总之,C3P0是一个强大的数据库连接池组件,提供了一整套完善的管理机制和性能...

    c3p0数据库连接池示例

    c3p0作为一款轻量级的数据库连接池,其易于配置和使用的特点使其在小型项目中广泛应用。通过合理配置,可以有效地管理数据库连接,提高系统的响应速度和稳定性。在实际项目中,根据系统的负载情况,不断调整和优化...

    c3p0数据库连接池jar包

    C3P0数据库连接池是一个开源的Java连接池实现,由Miquel Arroyo创建,主要用于管理和优化数据库连接。在Java应用中,数据库连接的建立、关闭和管理是一个耗时的过程,而C3P0则通过提供连接池功能,提高了数据库操作...

    数据库连接池C3P0.zip

    在本压缩包“数据库连接池C3P0.zip”中,包含了C3P0数据库连接池的相关jar包以及配置文件,用于帮助开发者集成到他们的Java应用中,特别是与MYSQL数据库配合使用。 C3P0的主要特性包括: 1. **连接池管理**:C3P0...

    C3P0数据库连接池

    **C3P0数据库连接池详解** ...综上所述,C3P0作为一款成熟的数据库连接池组件,提供了丰富的配置选项和良好的性能,是Java开发中连接数据库的常用选择。通过合理的配置和使用,可以显著提升应用程序的数据库操作效率。

    C3P0连接池jar包(正式).zip

    总的来说,C3P0作为一款成熟的数据库连接池,以其丰富的配置选项和稳定的性能,被广泛应用于各种Java企业级应用中。正确地配置和使用C3P0,可以显著提升系统的并发能力和响应速度,同时降低数据库的压力。

    C3P0数据库连接池jar包

    在Eclipse这样的集成开发环境中,导入C3P0的jar包后,可以通过以下步骤来使用C3P0数据库连接池: 1. 添加依赖:将c3p0-*.jar文件添加到项目的类路径中,或者在Maven或Gradle等构建工具中配置相关依赖。 2. 配置...

    hibernate c3p0 数据库连接池参数详解.txt

    C3P0 可以独立使用,也可以集成到 Hibernate 中,用作 Hibernate 的数据库连接池提供者。通过配置 C3P0 的参数,开发者可以更好地控制连接池的行为,从而提高应用程序的整体性能。 #### 2. C3P0 在 Hibernate 中的...

    开源数据库连接池c3p0

    开源数据库连接池c3p0是一款广泛应用于Java后端开发中的数据库连接管理工具,它能够有效地管理和优化数据库连接,提高应用的性能和响应速度。c3p0的主要功能包括连接池的创建、维护以及自动回收资源,使得多个并发...

    C3P0连接池配置需要的jar包

    C3P0连接池是Java应用中常用的数据库连接池组件,它允许程序在不关闭物理连接的情况下,管理和重用数据库连接,从而提高了应用程序的性能和效率。C3P0库依赖于其他几个JAR包来实现其功能,包括`c3p0-0.9.2.1.jar`、`...

    c3p0连接池附配置文件

    C3P0连接池是一款广泛应用于Java环境中的数据库连接池组件,它允许应用程序在不创建新的数据库连接的情况下重用已存在的连接,从而提高系统性能,减少数据库资源的消耗。C3P0的主要功能包括自动管理数据库连接的生命...

    C3P0连接池jar包.zip

    C3P0连接池是Java开发中常用的数据库连接池实现之一,它提供了高效且可靠的数据库连接管理服务。C3P0是由Mchange公司开发的开源项目,主要用于解决数据库连接的创建、分配、回收等问题,从而提高数据库操作的性能并...

    c3p0数据库连接池 资源

    c3p0数据库连接池是Java开发中的重要工具,通过合理的配置和使用,能够有效地提升数据库操作的性能,降低资源消耗。理解其工作原理和配置参数,对于优化数据库操作和提升系统性能至关重要。在实际项目中,应结合具体...

Global site tag (gtag.js) - Google Analytics