`
daiming253685
  • 浏览: 23160 次
  • 性别: 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  
啥对啥?!

相关推荐

    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数据库连接池需要的jar包及配置文件

    c3p0是一种开源JDBC数据库连接池技术,该jar包包含了连接池技术必须导入项目的c3p0-0.9.5.5.jar和mchange-commons-java-0.2.19.jar两个jar包,还有连接池配置需要的c3p0-config.xml配置文件,名字不能修改,不然无法...

    C3P0数据库连接池

    C3P0数据库链接的jar包,并且包含xml格式的数据库配置

    数据库连接池druid,c3p0,jdbctemplate,jar包.rar

    数据库连接池jar包,包含c3p0、druidjar包和依赖jar包,c3p0通过配置文件xml或者properties读取连接对象 druid通过properties读取连接,使用springJDBC JdbcTempalte简化sql操作

    c3p0连接池附配置文件

    内含jar文件,附加上了配置信息,有重要单词,供java开发者使用

    C3P0连接池jar包(完整版).zip

    C3P0:数据库连接池技术 步骤: 1.导入jar包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.12.jar 2.定义配置文件 名称:c3p0.properties 或者 c3p0-config.xml 路径:直接将文件放在src目录下即可 3.创建数据库连接池...

    C3P0连接池jar包(完整版).rar

    c3p0-0.9.5.2jar包完整包,包括xml配置样例

    c3p0完整包内置xml

    c3p0是款强大的数据库连接池 其完整包要到官网下载 第一次使用学习的同学一定很是头大!因为不知道怎么写xml环境配置文件 所以本人稍微做了整理 里面有样板的xml配置文件 注意:1 配置文件名不能乱改(否则c3p0会找不到...

    C3P0连接池.rar

    如何使用c3p0数据库连接池jar包: 1.导入两个jar包:c3p0-0.9.5.2.jar、mchange-commons-java-0.2.12.jar 2.定义配置文件(可直接放在src文件夹下):c3p0.properties或c3p0-config.xml 3.创建数据库连接池对象...

    C3p0连接池连接数据库教程+JavaDemo

    C3P0是一个开放源代码的JDBC连接池,Hibernate的发行包中默认使用此连接池。据说性能最好。 C3p0连接池连接数据库教程+JavaDemoo Demo包括两个,一个代码配置方法,一个是XML配置方法

    c3p0下载 数据库连接池jar包

    数据库连接池jar包 内置了c3p0-config.xml配置文件 jar包在lib中 c3p0-0.9.5.5.jar c3p0-oracle-thin-extras-0.9.5.5.jar mchange-commons-java-0.2.19.jar

    c3p0连接池所需的全部包.zip

    C3P0是一个用于管理JDBC连接池的Java库。...配置C3P0连接池:在应用程序的配置文件中,你需要配置C3P0连接池的参数。这通常包括数据库的连接URL、用户名、密码,以及连接池的一些设置,如最小连接数、最大连接数等。

    c3p0-config.xml

    C3P0是一个开源的JDBC连接池,目前使用它的开源项目有Hibernate,Spring等。 数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从...

    RESTFUL + SPRINGMVC + C3P0连接池 的完美实现

    RESTFUL + SPRINGMVC + C3P0连接池 的完美实现. 传递json数据到springmvc自动转为obj。obj传前台可直接转换为json。 rest配置文件内 修改,可同理兼容 JSON XML AMF 或其他各种。

    c3p0资源包

    c3p0 资源包 包含jar包以及c3p0标准xml 用与构建数据库连接池

    spring连接池配置

    采用C3P0方式配置数据库连接池,有完整的applicationContext.xml 文件.

    c3p0数据库.rar

    这里是java的c3p0池的jar包和xml,仅供学习 C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。

    SSH整合学习笔记之spring与hibernate整合(二)之c3p0

    SSH整合学习笔记之spring与hibernate整合(二)之c3p0 spring与hibernate整合基于XML方式--c3p0数据库连接池的使用。

Global site tag (gtag.js) - Google Analytics