|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开数据|数据库|数据库毗连其次是毗连池的工场类ConnectionFactory,经由过程该类来将一个毗连池对象与一个称号对应起来,利用者经由过程该称号就能够猎取指定的毗连池对象,详细代码以下:
/**
*毗连池类厂,该类经常使用来保留多个数据源称号合数据库毗连池对应的哈希
*@authorliusoft
*/
publicclassConnectionFactory
{
//该哈希表用来保留数据源名和毗连池对象的干系表
staticHashtableconnectionPools=null;
static{
connectionPools=newHashtable(2,0.75F);
}
/**
*从毗连池工场中猎取指命名称对应的毗连池对象
*@paramdataSource毗连池对象对应的称号
*@returnDataSource前往称号对应的毗连池对象
*@throwsNameNotFoundException没法找到指定的毗连池
*/
publicstaticDataSourcelookup(StringdataSource)
throwsNameNotFoundException
{
Objectds=null;
ds=connectionPools.get(dataSource);
if(ds==null||!(dsinstanceofDataSource))
thrownewNameNotFoundException(dataSource);
return(DataSource)ds;
}
/**
*将指定的名字和数据库毗连设置绑定在一同并初始化数据库毗连池
*@paramname对应毗连池的称号
*@paramparam毗连池的设置参数,详细请见类ConnectionParam
*@returnDataSource假如绑定乐成后前往毗连池对象
*@throwsNameAlreadyBoundException必定名字name已绑定章抛出该非常
*@throwsClassNotFoundException没法找到毗连池的设置中的驱动程序类
*@throwsIllegalAccessException毗连池设置中的驱动程序类有误
*@throwsInstantiationException没法实例化驱动程序类
*@throwsSQLException没法一般毗连指定的数据库
*/
publicstaticDataSourcebind(Stringname,ConnectionParamparam)
throwsNameAlreadyBoundException,ClassNotFoundException,
IllegalAccessException,InstantiationException,SQLException
{
DataSourceImplsource=null;
try{
lookup(name);
thrownewNameAlreadyBoundException(name);
}catch(NameNotFoundExceptione){
source=newDataSourceImpl(param);
source.initConnection();
connectionPools.put(name,source);
}
returnsource;
}
/**
*从头绑定命据库毗连池
*@paramname对应毗连池的称号
*@paramparam毗连池的设置参数,详细请见类ConnectionParam
*@returnDataSource假如绑定乐成后前往毗连池对象
*@throwsNameAlreadyBoundException必定名字name已绑定章抛出该非常
*@throwsClassNotFoundException没法找到毗连池的设置中的驱动程序类
*@throwsIllegalAccessException毗连池设置中的驱动程序类有误
*@throwsInstantiationException没法实例化驱动程序类
*@throwsSQLException没法一般毗连指定的数据库
*/
publicstaticDataSourcerebind(Stringname,ConnectionParamparam)
throwsNameAlreadyBoundException,ClassNotFoundException,
IllegalAccessException,InstantiationException,SQLException
{
try{
unbind(name);
}catch(Exceptione){}
returnbind(name,param);
}
/**
*删除一个数据库毗连池对象
*@paramname
*@throwsNameNotFoundException
*/
publicstaticvoidunbind(Stringname)throwsNameNotFoundException
{
DataSourcedataSource=lookup(name);
if(dataSourceinstanceofDataSourceImpl){
DataSourceImpldsi=(DataSourceImpl)dataSource;
try{
dsi.stop();
dsi.close();
}catch(Exceptione){
}finally{
dsi=null;
}
}
connectionPools.remove(name);
}
}
ConnectionFactory次要供应了用户将将毗连池绑定到一个详细的称号上和作废绑定的操纵。利用者只必要体贴这两个类便可利用数据库毗连池的功效。上面我们给出一段怎样利用毗连池的代码:
Stringname="pool";
Stringdriver="sun.jdbc.odbc.JdbcOdbcDriver";
Stringurl="jdbc:odbc:datasource";
ConnectionParamparam=newConnectionParam(driver,url,null,null);
param.setMinConnection(1);
param.setMaxConnection(5);
param.setTimeoutValue(20000);
ConnectionFactory.bind(name,param);
System.out.println("binddatasourceok.");
//以上代码是用来挂号一个毗连池对象,该操纵能够在程序初始化只做一次便可
//以下入手下手就是利用者真正必要写的代码
DataSourceds=ConnectionFactory.lookup(name);
try{
for(inti=0;i<10;i++){
Connectionconn=ds.getConnection();
try{
testSQL(conn,sql);
}finally{
try{
conn.close();
}catch(Exceptione){}
}
}
}catch(Exceptione){
e.printStackTrace();
}finally{
ConnectionFactory.unbind(name);
System.out.println("unbinddatasourceok.");
System.exit(0);
}
从利用者的示例代码就能够看出,我们已办理了惯例毗连池发生的两个成绩。可是我们最最体贴的是怎样办理接受close办法的举措。接受事情次要在ConnectionFactory中的两句代码:
source=newDataSourceImpl(param);
source.initConnection();
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。 |
|