使用XML配置c3p0数据库连接池
本文实例为大家分享了使用XML配置c3p0数据库连接池的具体代码,供大家参考,具体内容如下
想通过JDBC来配置c3p0数据库连接池,上网想找到解析工具没有找到,只要自己写了一个,可以读取在根目录下的c3p0配置文档,再根据配置信息来反射ComboPooledDataSource中的setter进行连接池的配置。
本人水平很菜,如果有什么不足请大家指出。
packagecn.vagasnail.sgms.util;
importjava.lang.reflect.InvocationTargetException;
importjava.lang.reflect.Method;
importjava.sql.Connection;
importjava.sql.SQLException;
importjava.util.Arrays;
importjava.util.Map;
importjava.util.regex.Matcher;
importjava.util.regex.Pattern;
importcom.mchange.v2.c3p0.ComboPooledDataSource;
/**
*得到c3p0的数据库连接池
*
*@authorvagasnail
*
*2009-3-26下午07:54:10
*/
publicclassC3p0ConnectionFactory{
privateC3p0ConnectionFactory(){
}
privatestaticComboPooledDataSourceds=null;
static{
Mapconfigs=C3p0XMLParser
.parserXML("c3p0-config.xml");//得到一个map包含配置信息
ds=newComboPooledDataSource();//得到一个数据库连接池数据源
Method[]fs=ComboPooledDataSource.class.getMethods();//得到该数据库连接池数据源的所以方法信息
Patternpattern=Pattern.compile("get([A-Z]\\w+)()");
for(Methodm:fs){
Matchermatcher=pattern.matcher(m.getName());
Stringstr="";
StringstrLow="";
if(matcher.find()){
str=matcher.group(1);
charc=str.charAt(0);
strLow=Character.toLowerCase(c)+str.substring(1);
}
try{
Stringvalue=configs.get(strLow);
intintValue=0;
MethodsetMod=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(NumberFormatExceptionnfe){
setMod=ComboPooledDataSource.class.getMethod("set"
+str,String.class);
if(setMod!=null)
setMod.invoke(ds,value);
}
}else
continue;
}catch(SecurityExceptione){
e.printStackTrace();
}catch(NoSuchMethodExceptione){
//e.printStackTrace();//如果方法不存在则继续下面的循环
continue;
}catch(IllegalArgumentExceptione){
e.printStackTrace();
}catch(IllegalAccessExceptione){
e.printStackTrace();
}catch(InvocationTargetExceptione){
e.printStackTrace();
}
}
login(configs);
}
privatestaticvoidlogin(Mapconfigs){
ds.setUser(configs.get("user"));
ds.setPassword(configs.get("password"));
}
/**
*得到一个数据库连接
*
*@return数据库连接
*/
publicstaticsynchronizedConnectiongetConnection(){
Connectioncon=null;
try{
con=ds.getConnection();
}catch(SQLExceptione1){
e1.printStackTrace();
}
returncon;
}
/**
*关闭数据库(并没有真正的关闭,连接池把连接存储起来下一次调用的时候还可以使用)
*@paramconn
*@throwsSQLException
*//*
publicstaticsynchronizedvoidclose(Connectionconn){
if(conn!=null){
try{
conn.close();
conn=null;
}catch(SQLExceptione){
e.printStackTrace();
return;
}
}
}*/
publicstaticintgetCurrentConns()throwsSQLException{
returnds.getNumConnectionsAllUsers();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。