盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

使用JAVA中的动态代理完成数据库连接池

时间:2024/10/28作者:未知来源:盾怪网教程人气:

[摘要]!(ds instanceof DataSource))    throw new NameNotFoundException(dataSource);    return (DataSource)...
!(ds instanceof DataSource))
   throw new NameNotFoundException(dataSource);
   return (DataSource)ds;
   }

   /**
   * 将指定的名字和数据库连接配置绑定在一起并初始化数据库连接池
   * @param name 对应连接池的名称
   * @param param 连接池的配置参数,具体请见类ConnectionParam
   * @return DataSource 如果绑定成功后返回连接池对象
   * @throws NameAlreadyBoundException 一定名字name已经绑定则抛出该异常
   * @throws ClassNotFoundException 无法找到连接池的配置中的驱动程序类
   * @throws IllegalAccessException 连接池配置中的驱动程序类有误
   * @throws InstantiationException 无法实例化驱动程序类
   * @throws SQLException 无法正常连接指定的数据库
   */
   public static DataSource bind(String name, ConnectionParam param)
   throws NameAlreadyBoundException,ClassNotFoundException,
   IllegalAccessException,InstantiationException,SQLException
   {
   DataSourceImpl source = null;
   try{
   lookup(name);
   throw new NameAlreadyBoundException(name);
   }catch(NameNotFoundException e){
   source = new DataSourceImpl(param);
   source.initConnection();
   connectionPools.put(name, source);
   }
   return source;
   }
   /**
   * 重新绑定数据库连接池
   * @param name 对应连接池的名称
   * @param param 连接池的配置参数,具体请见类ConnectionParam
   * @return DataSource 如果绑定成功后返回连接池对象
   * @throws NameAlreadyBoundException 一定名字name已经绑定则抛出该异常
   * @throws ClassNotFoundException 无法找到连接池的配置中的驱动程序类
   * @throws IllegalAccessException 连接池配置中的驱动程序类有误
   * @throws InstantiationException 无法实例化驱动程序类
   * @throws SQLException 无法正常连接指定的数据库
   */
   public static DataSource rebind(String name, ConnectionParam param)
   throws NameAlreadyBoundException,ClassNotFoundException,
   IllegalAccessException,InstantiationException,SQLException
   {
   try{
   unbind(name);
   }catch(Exception e){}
   return bind(name, param);
   }
   /**
   * 删除一个数据库连接池对象
   * @param name
   * @throws NameNotFoundException
   */
   public static void unbind(String name) throws NameNotFoundException
   {
   DataSource dataSource = lookup(name);
   if(dataSource instanceof DataSourceImpl){
   DataSourceImpl dsi = (DataSourceImpl)dataSource;
   try{
   dsi.stop();
   dsi.close();
   }catch(Exception e){
   }finally{
   dsi = null;
   }
   }
   connectionPools.remove(name);
   }
  
  }

  ConnectionFactory主要提供了用户将将连接池绑定到一个具体的名称上以及取消绑定的操作。使用者只需要关心这两个类即可使用数据库连接池的功能。下面我们给出一段如何使用连接池的代码:

   String name = "pool";
   String driver = " sun.jdbc.odbc.JdbcOdbcDriver ";
   String url = "jdbc:odbc:datasource";
   ConnectionParam param = new ConnectionParam(driver,url,null,null);
   param.setMinConnection(1);
   param.setMaxConnection(5);
   param.setTimeoutValue(20000);
   ConnectionFactory.bind(name, param);
   System.out.println("bind datasource ok.");
   //以上代码是用来登记一个连接池对象,该操作可以在程序初始化只做一次即可
   //以下开始就是使用者真正需要写的代码
   DataSource ds = ConnectionFactory.lookup(name);
   try{
   for(int i=0;i<10;i++){
   Connection conn = ds.getConnection();
   try{
   testSQL(conn, sql);
   }finally{
   try{
   conn.close();
   }catch(Exception e){}
   }
   }
   }catch(Exception e){
   e.printStackTrace();
   }finally{
   ConnectionFactory.unbind(name);
   System.out.println("unbind datasource ok.");
   System.exit(0);
   }


关键词:运用JAVA中的动态代理完成数据库连接池




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版