熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

好的連接池,免費的

2013-11-15 11:49:26  來源: JSP教程 

  /*

  * Copyright (C) Jackliu

  * <a href="mailto: "></a>
  

  * WWWCNJAVACOM All Rights Reserved

  */

  package javadatabase;
  

  import javautil*;

   import javasql*;


  

  /**

   * <font size=><b>數據庫連接池</b></font>

   * <font color=gray>這個類為系統提供一個數據庫的連接池</font>

   * <br><br>

   * @see Sys_config

   * @author <a href="mailto: ">Jackliu</a>
  

   */

   public class DBPoolsManager{

   static private DBPoolsManager instance; // 唯一實例

   DBPools pools;

   Driver theDrv;

  

   /**

   * 構造方法

   * <br>創建數據庫連接池(oracle OCI)

   */

   private DBPoolsManager(){

   /* use oracle OCI*/

   String url = "jdbc:oracle:oci:@"+Sys_configgetDATABASE_INSTANCE();
  

   String user = Sys_configgetDATABASE_USERID();

   String password = Sys_configgetDATABASE_USERPWD();

   int max = IntegerparseInt(Sys_configgetDATA_SESSION());

   try{

   /*use mysql driver

   theDrv = new orggjtmmmysqlDriver();*/


  

  /*use oracle driver*/

   theDrv = new oraclejdbcdriverOracleDriver();

   DriverManagerregisterDriver(theDrv);

   }

   catch ( SQLException e ){

   //debug to errlog

   eprintStackTrace(Systemerr);

   }

   pools = new DBPools(url user password max);

   poolsshowDetail();

   }


  

  /**

   * 得到一個數據庫的連接池管理的實例

   * @return 返回一個數據庫連接池管理的一個實例

   */

   static synchronized public DBPoolsManager getInstance(){

   if (instance == null){

   instance = new DBPoolsManager();

   }

   return instance;

   }


  

  /**

   * 從數據庫連接池中獲取一個空閒的數據庫連接實例

   * <br>如果超出連接池的最大連接返回一個空的對象

   * @return 返回一個數據庫連接對象

   */

   public Connection getConnection(){

   return poolsgetConnection();

   }


  

  /**

   * 釋放一個正在工作的數據庫連接到數據庫連接池

   * @param con Connection 一個數據庫連接

   */

   public void freeConnection(Connection con){

   poolsfreeConnection(con);

   }

  

   /**

   * 關閉數據庫連接池

   */

   public void close(){

   try{

   poolsshowDetail();

   poolsclose();

   DriverManagerderegisterDriver(theDrv);

   }

   catch ( SQLException e ){

   //debug to errlog

   eprintStackTrace(Systemerr);

   }

   }


  

  class DBPools{

   private Vector freeConnections = new Vector();

   private Vector currentConnections = new Vector();

   private int maxConn;

   private String URL;

   private String password;

   private String user;


  

  /**

   * 構造函數

   * <br>創建一個數據庫連接池

   * @param URL String JDBC URL

   * @param user String User id || null

   * @param password String User pwd ||null

   * @param maxConn int Max connect

   */

   public DBPools(String URL String user String password int maxConn){

   thisURL = URL;

   thisuser = user;

   thispassword = password;

   thismaxConn = maxConn;

   }


  

  /**

   * 釋放一個正在工作的數據庫連接到數據庫連接池

   * @param con Connection 一個數據庫連接

   */

   public synchronized void freeConnection(Connection con){

   //remove from freeConnection vector

   currentConnectionsremove(con);

   freeConnectionsadd(con);

   }


  

  /**

   * 從連接池獲得一個可用連接如沒有空閒的連接且當前連接數小於最大連接

   * 數限制則創建新連接如原來登記為可用的連接不再有效則從向量刪除之

   * 然後遞歸調用自己以嘗試新的可用連接

   * @return 返回一個數據庫連接對象

   */

   public synchronized Connection getConnection(){

   Connection con = null;

   if (freeConnectionssize() > ) {

   // 獲取向量中第一個可用連接

   con = (Connection) freeConnectionsfirstElement();

   freeConnectionsremoveElementAt();

   try{

   if (conisClosed()){

   //遞歸調用自己嘗試再次獲取可用連接

   con = getConnection();

   }

   currentConnectionsadd(con);

   }

   catch (SQLException e){

   //遞歸調用自己嘗試再次獲取可用連接

   con = getConnection();

   }

   }

   else if (maxConn == || currentConnectionssize() < maxConn){

   con = newConnection();

   }

   return con;

   }

   /**

   * 關閉數據庫連接池

   */

   public void close(){

   for ( int i=; i<freeConnectionssize(); i++ ){

   try{

   ((Connection)freeConnectionsget(i))close();

   }

   catch( SQLException e ){

   //debug to errlog

   eprintStackTrace(Systemerr);

   }

   }

   for ( int i=; i<currentConnectionssize(); i++ ){

   try{

   ((Connection)currentConnectionsget(i))close();

   }

   catch( SQLException e ){

   //debug to errlog

   eprintStackTrace(Systemerr);

   }

   }

   }


  

  /**

   * 創建新的連接

   */

   private synchronized Connection newConnection(){

   OADS_logtoFileLn("DBPool create new!!!");

   //showDetail();

   Connection con = null;

   try{

   if (user == null){

   con = DriverManagergetConnection(URL);

   }

   else{

   con = DriverManagergetConnection(URL user password);

   }

   currentConnectionsadd(con); }

   catch (SQLException e){

   return null;

   }

   return con;

   }

   /**

   * 顯示數據庫連接池的狀態信息

   */

   public void showDetail(){

   OADS_logtoFileLn("current DB connections : " + currentConnectionssize());
  

   OADS_logtoFileLn("free DB connections : " + freeConnectionssize());
  

   }

   }


  
  

  }

  

  


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19689.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.