使用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(Map configs){ 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(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。