知识大全 Oracle数据库 关于连接池一

Posted 属性

篇首语:花门楼前见秋草,岂能贫贱相看老。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle数据库 关于连接池一相关的知识,希望对你有一定的参考价值。

Oracle数据库 关于连接池一  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  到目前为目 JDBC 的连结池只是一个接口 没有真正的实现 JDBC 正在开发中 据报已经支持连结池 但JDBC 用了JNDI技术 连结池的配置可以让一个高手都烦死     目前第三方已经实现的连结池当然是poolman 版对一般用户来说已经足够用了 配置也简单 版虽然增加了一些功能 但配置也是采用JNDI 对RMI和EJB不懂的朋友可能很烦 建议用 的了     如果有兴趣 自己也可以实现连结池 最关键的技术也就是把连结作为参数传给一个BEAN 用完后返回这个参数连结而不是关闭     下面是一个简单的实现:    DBConnectionManager java程序清单如下      import java io *;   import java sql *;   import java util *;   import java util Date;      /**   * 管理类DBConnectionManager支持对一个或多个由属性文件定义的数据库连接   * 池的访问 客户程序可以调用getInstance()方法访问本类的唯一实例    */   public class DBConnectionManager    static private DBConnectionManager instance; // 唯一实例   static private int clients;      private Vector drivers = new Vector();   private PrintWriter log;   private Hashtable pools = new Hashtable();      /**   * 返回唯一实例 如果是第一次调用此方法 则创建实例   *   * @return DBConnectionManager 唯一实例   */   static synchronized public DBConnectionManager getInstance()    if (instance == null)    instance = new DBConnectionManager();      clients++;   return instance;         /**   * 建构函数私有以防止其它对象创建本类实例   */   private DBConnectionManager()    init();         /**   * 将连接对象返回给由名字指定的连接池   *   * @param name 在属性文件中定义的连接池名字   * @param con 连接对象\\\\r     */   public void freeConnection(String name Connection con)    DBConnectionPool pool = (DBConnectionPool) pools get(name);   if (pool != null)    pool freeConnection(con);            /**   * 获得一个可用的(空闲的)连接 如果没有可用连接 且已有连接数小于最大连接数   * 限制 则创建并返回新连接   *   * @param name 在属性文件中定义的连接池名字   * @return Connection 可用连接或null   */   public Connection getConnection(String name)    DBConnectionPool pool = (DBConnectionPool) pools get(name);   if (pool != null)    return pool getConnection();      return null;         /**   * 获得一个可用连接 若没有可用连接 且已有连接数小于最大连接数限制    * 则创建并返回新连接 否则 在指定的时间内等待其它线程释放连接    *   * @param name 连接池名字   * @param time 以毫秒计的等待时间\\\\r     * @return Connection 可用连接或null   */   public Connection getConnection(String name long time)    DBConnectionPool pool = (DBConnectionPool) pools get(name);   if (pool != null)    return pool getConnection(time);      return null;         /**   * 关闭所有连接 撤销驱动程序的注册\\\\r     */   public synchronized void release()    // 等待直到最后一个客户程序调用   if ( clients != )    return;         Enumeration allPools = pools elements();   while (allPools hasMoreElements())    DBConnectionPool pool = (DBConnectionPool) allPools nextElement();   pool release();      Enumeration allDrivers = drivers elements();   while (allDrivers hasMoreElements())    Driver driver = (Driver) allDrivers nextElement();   try    DriverManager deregisterDriver(driver);   log( 撤销JDBC驱动程序 + driver getClass() getName()+ 的注册\\\\\\ );      catch (SQLException e)    log(e 无法撤销下列JDBC驱动程序的注册: + driver getClass() getName());               /**   * 根据指定属性创建连接池实例    *   * @param props 连接池属性   */   private void createPools(Properties props)    Enumeration propNames = props propertyNames();   while (propNames hasMoreElements())    String name = (String) propNames nextElement();   if (name endsWith( url ))    String poolName = name substring( name lastIndexOf( ));   String url = props getProperty(poolName + url );   if (url == null)    log( 没有为连接池 + poolName + 指定URL );   continue;      String user = props getProperty(poolName + user );   String password = props getProperty(poolName + password );   String maxconn = props getProperty(poolName + maxconn );   int max;   try    max = Integer valueOf(maxconn) intValue();      catch (NumberFormatException e)    log( 错误的最大连接数限制: + maxconn + 连接池: + poolName);   max = ;      DBConnectionPool pool =   new DBConnectionPool(poolName url user password max);   pools put(poolName pool);   log( 成功创建连接池 + poolName);               /**   * 读取属性完成初始化   */   private void init()    InputStream is = getClass() getResourceAsStream( /db properties );   Properties dbProps = new Properties();   try    dbProps load(is);      catch (Exception e)    System err println( 不能读取属性文件 +   请确保db properties在CLASSPATH指定的路径中 );   return;      String logFile = dbProps getProperty( logfile DBConnectionManager log );   try    log = new PrintWriter(new FileWriter(logFile true) true);      catch (IOException e)    System err println( 无法打开日志文件: + logFile);   log = new PrintWriter(System err);      loadDrivers(dbProps);   createPools(dbProps);         /**   * 装载和注册所有JDBC驱动程序\\\\r     *   * @param props 属性   */   private void loadDrivers(Properties props)    String driverClasses = props getProperty( drivers );   StringTokenizer st = new StringTokenizer(driverClasses);   while (st hasMoreElements())    String driverClassName = st nextToken() trim();   try    Driver driver = (Driver)   Class forName(driverClassName) newInstance();   DriverManager registerDriver(driver);   drivers addElement(driver);   log( 成功注册JDBC驱动程序\\\\\\ + driverClassName);      catch (Exception e)    log( 无法注册JDBC驱动程序: +   driverClassName + 错误: + e);               /**   * 将文本信息写入日志文件   */   private void log(String msg)    log println(new Date() + : + msg);         /**   * 将文本信息与异常写入日志文件   */   private void log(Throwable e String msg)    log println(new Date() + : + msg);   e printStackTrace(log);         /**   * 此内部类定义了一个连接池 它能够根据要求创建新连接 直到预定的最\\\\r cha138/Article/program/Oracle/201311/17331

相关参考

知识大全 连接oracle的总结(关于tnsname和监听)

该文是我连接oracle的总结特别适合于程序开发人员与oracle菜鸟  如何配置才能使客户端连到数据库要使一个客户端机器能连接oracle数据库需要在客户端机器上安装oracle

知识大全 关于JDBC客户端如何连接ORACLE数据库RAC的负载均衡

关于JDBC客户端如何连接ORACLE数据库RAC的负载均衡  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看

知识大全 关于oracle集群后的weblogic数据源配置

  有两个db做了RAC虚拟路径为ypdbweblogic的数据源连接URL改为下面  当其中一台db挂了保证数据源连接正常  jdbc:oracle:thin:@  (DESCRIPTION=  (

知识大全 通过Oracle连接管理器控制数据库连接

通过Oracle连接管理器控制数据库连接  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  为了更好

知识大全 连接oracle数据库及故障解决办法

  如何配置才能使客户端连到数据库  要使一个客户端机器能连接oracle数据库需要在客户端机器上安装oracle的客户端软件唯一的例外就是java连接数据库的时候可以用jdbcthin模式不用装or

知识大全 通过JDBC连接oracle数据库

通过JDBC连接oracle数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!Java数据库连接

知识大全 Oracle数据库中的(+)连接

Oracle数据库中的(+)连接  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  从表AA(+)=

知识大全 Oracle数据库中的(+)连接如何操作

Oracle数据库中的(+)连接如何操作?  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文主

知识大全 asp.net 连接Oracle数据库

asp.net连接Oracle数据库  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!代码如下&nbs

知识大全 连接Oracle数据库的Hibernate配置文件

连接Oracle数据库的Hibernate配置文件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!