亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? dbconnectionmanager.java

?? 自己寫的一個數據庫連接池
?? JAVA
字號:
package cn.edu.jdbc.common;/** * <p>Title: </p> * JDBC數據庫連接池的實現 * @author not attributable * @version 1.0 */import java.sql.*;import java.io.*;import java.util.*;import java.util.Date;public class DBConnectionManager {  static private DBConnectionManager instance;  //客戶端的連接數  static private int clients;  // 存放驅動程序  private Vector drivers = new Vector();  // private PrintWriter log;  // 存放創建的連接池對象  private Hashtable pools = new Hashtable();  /**   * 得到DBConnectionManager 對象實例,該方法內部提供了創建連接池對象的功能   *    * @return DBConnectionManager 對象實例   */  static synchronized public DBConnectionManager getInstance() {    if (instance == null) {      instance = new DBConnectionManager();    }    clients++;    return instance;  }  /**   * 構造函數   *    */  private DBConnectionManager() {    init();  }  /**   * 將使用完的數據庫連接   *    * @param name   *          屬性文件中定義了連接池名   * @param con   *          數據庫連接   */  public void freeConnection(String name, Connection con) {    DBConnectionPool pool = (DBConnectionPool) pools.get(name);    if (pool != null) {      pool.freeConnection(con);    }  }  /**   * 得到一個打開的數據庫連接,如果當前沒有可用的連接,并且沒有達到最大的連接數則 創建一個新的連接   *    * @param name   *          屬性文件中定義了的連接池的名字   * @return Connection 數據庫連接   */  public Connection getConnection(String name) {    //根據連接池名取得特定的連接池對象    DBConnectionPool pool = (DBConnectionPool) pools.get(name);    if (pool != null) {       //根據取得的連接池對象獲得特定的連接對象      return pool.getConnection();     }    return null;  }  /**   * 返回一個打開的連接,如果當前沒有可用的連接,并簽沒有達到最大的連接數,則 創建一個新的連接,如果已經達到了最大的連接數,則等待,或者超時   *    * @param name   *          屬性文件中定義了連接池的名字   * @param time   *          等待的毫秒數   * @return Connection 數據庫連接   */  // public Connection getConnection(String name, long time) {  // DBConnectionPool pool = (DBConnectionPool)pools.get(name);  // if (pool != null) {  // return pool.getConnection(time);  // }  // return null;  // }  /**   * 關閉所有打開的連接,解除所有驅動程序的登記   *    */  public synchronized void release() {    // 如果當前仍有用戶與數據庫連接,則等待    if (--clients != 0) { 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("Deregistered JDBC driver " + driver.getClass().getName());      }      catch (SQLException e) {        // log(e, "Can't deregister JDBC driver " +        // driver.getClass().getName());      }    }  }  /**   * 基于屬性創建DBConnectionPool的實例 DBConnectionPool 可是使用下面的屬性   *    * <poolname>.url 數據庫的url <poolname>.user 數據庫用戶 <poolname>.password 數據庫用戶的口令   * <poolname>.maxconn 連接的最大數目   *    * @param props   *          數據庫連接池的屬性   *    */  public void createPools(Properties props) {    Enumeration propNames = props.propertyNames();    while (propNames.hasMoreElements()) {      //獲得文件中的所有屬性名信息      String name = (String) propNames.nextElement();      if (name.endsWith(".drivers")) {        String poolName = name.substring(0, name.lastIndexOf("."));        String url = props.getProperty(poolName + ".url");        if (url == null) {          // log("NO URL specified for " + poolName);          continue;        }        String user = props.getProperty(poolName + ".user");        String password = props.getProperty(poolName + ".password");        String maxconn = props.getProperty(poolName + ".maxconn", "0");        int max;        try {          int a = 0;          max = Integer.valueOf(maxconn).intValue();        }        catch (NumberFormatException e) {          // log("Invalid maxcoon value " + maxconn + "for " + poolName);          max = 0;        }        DBConnectionPool pool = new DBConnectionPool(poolName, url, user,            password, max);        //將創建的連接池對象保存在hashMap中        pools.put(poolName, pool);        // log("Invalid pool" + poolName);      }    }  }  /**   * 裝載屬性并用其值初始化實例   */  private void init() {    // InputStream is = getClass().getResourceAsStream("/db.properties");    Properties dbProps = new Properties();    try {      FileInputStream is = new FileInputStream(new File("db.properties"));      dbProps.load(is);    }    catch (Exception e) {      System.err.println("Can't read the properties file. "          + "Make sure db.properties is int the CLASSPATH");      return;    }    // String logFile = dbProps.getProperty("logFile",    // "DBConnectionManager.log");    // try    // {    // log = new PrintWriter(new FileWriter(logFile, true),true);    // }    // catch (IOException e)    // {    // System.err.println("Can't open the log file "+ logFile);    // log = new PrintWriter(System.err);    // }    //加載所有配置文件中的描述的驅動程序    loadDrivers(dbProps);    //根據配置信息創建所有的連接池對象    createPools(dbProps);  }  /**   * 裝載并登記所有的JDBC驅動程序   *    * @param props   *          數據庫連接池的屬性   */  private void loadDrivers(Properties props) {    String driverClasses = props.getProperty("oracle.drivers");    // StringTokenizer st = new StringTokenizer(driverClasses);    //    // while (st.hasMoreTokens()){    // String driverClassName = st.nextToken().trim();    try {      // Driver driver = (Driver)Class.forName(driverClassName).newInstance();      Driver driver = (Driver) Class.forName(driverClasses).newInstance();      DriverManager.registerDriver(driver);      drivers.addElement(driver);      // log("Registerd JDBC Driver " +driverClassName);    }    catch (Exception e) {      // log("Can't register JDBC Driver " + driverClasses + ", Exception:" +      // 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);  // }  /**   * 一個內部類,代表一個數據庫連接池   */  private class DBConnectionPool {        //被取走的連接對象個數    private int checkedOut;    //存放連接對象的集合對象    private Vector freeConnection = new Vector();    //定義連接池的最大連接數    private int maxConn;    //定義連接池的名稱    private String name;    //數據庫訪問密碼    private String password;    //數據庫url    private String URL;    //數據庫訪問用戶名    private String user;    /**     * 創建一個新的連接池     *      * @param name     *          連接池的名字     * @param URL     *          數據庫的JDBC URL     * @param user     *          數據庫連接的用戶名     * @param password     *          數據庫的用戶口令     * @param maxConn     *          最大的連接數,如果為0則每限制     *      */    public DBConnectionPool(String name, String URL, String user,        String password, int maxConn) {      this.name = name;      this.URL = URL;      this.user = user;      this.password = password;      this.maxConn = maxConn;    }    /**     * 將連接插入連接池,并通知所有等待連接的其他線程     *      * @param con     *          插入連接     */    public synchronized void freeConnection(Connection conn) {      // 將連接放到Vector 對象中其他連接之后      freeConnection.addElement(conn);      checkedOut--;            //喚醒其他線程來執行連接池的各種功能操作      notifyAll();    }    /**     * 從連接池得到一個連接, 如果當前沒有空閑的連接, 如果連接數沒有達到最大,則創建一個新的連接     */    public synchronized Connection getConnection() {      Connection con = null;      if (freeConnection.size() > 0) {        // 從Vector對象中得到第一個數據庫連接        con = (Connection) freeConnection.firstElement();        // 將使用了的數據庫連接從數據庫連接池中刪除        freeConnection.removeElementAt(0);        try {          if (con.isClosed()) {            // log("Remove bad conection from " + name);            con = getConnection();          }        }        catch (SQLException e) {          // log("Remove bad connection form " + name);          con = getConnection();        }      }      else if (checkedOut < maxConn) {        con = newConnection();      }      if (con != null) {        checkedOut++;      }      return con;    }    /**     * 從連接池中得到一個連接,如果當前沒有空閑的連接,如果數據庫的連接沒有達到最大 則創建一個新的     *      * @param timeout     *          毫秒為單位的超時的值     */    public synchronized Connection getConnection(long timeout) {      // 得到當前的時間,作為開始時間      long startTime = new Date().getTime();      Connection con;      while ((con = getConnection()) == null) {        try {          wait(timeout);        }        catch (InterruptedException e) {          if ((new Date().getTime() - startTime) >= timeout) {            // 超時            return null;          }        }      }      return con;    }    /**     * 關閉所有的數據庫連接     */    public synchronized void release() {      // 得到數據庫連接池中的所有連接      Enumeration allConnections = freeConnection.elements();      //循環關閉vector中所有連接對象      while (allConnections.hasMoreElements()) {        Connection con = (Connection) allConnections.nextElement();        try {          // 關閉數據庫連接          con.close();          // log("Closed connetion for pool" + name);        }        catch (SQLException e) {          // log(e, "Can't close connection for pool" + name);        }      }      //刪除Vector中關閉的所有連接對象      freeConnection.removeAllElements();    }    /**     * 創建一個新的連接,如果可能,使用指定的user和passwoed     */    private Connection newConnection() {      Connection con = null;      try {        if (user == null) {          // 得到一個新的數據庫連接          con = DriverManager.getConnection(URL);        }        else {          // 得到一個新的數據庫連接,使用用戶和koling、          con = DriverManager.getConnection(URL, user, password);        }        // log("Created a new connection in pool " + name);      }      catch (SQLException e) {        // log(e,"Can't create a new connection for " + URL);        return null;      }      return con;    }  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
福利一区二区在线| 中文字幕 久热精品 视频在线 | 欧美日韩大陆一区二区| 99亚偷拍自图区亚洲| 成人免费视频视频| 国产一区91精品张津瑜| 国产成人在线影院| 国产v日产∨综合v精品视频| 国产麻豆欧美日韩一区| 国产在线播放一区| 国产麻豆9l精品三级站| 粉嫩av一区二区三区在线播放| 国产精品亚洲午夜一区二区三区| 国产a精品视频| 91丨九色丨蝌蚪富婆spa| 91麻豆国产在线观看| 欧美剧在线免费观看网站 | 成人开心网精品视频| 成人涩涩免费视频| 99精品1区2区| 在线观看一区二区视频| 欧美日韩国产精品成人| 欧美成人精品1314www| 久久精品亚洲乱码伦伦中文| 中文字幕第一页久久| 一区二区三区影院| 乱一区二区av| 成人综合激情网| 欧美日韩激情一区二区三区| 日韩午夜在线影院| 日本一区二区免费在线观看视频| 中文字幕一区二| 日韩国产欧美在线视频| 国产精品一区二区免费不卡| 91麻豆国产在线观看| 日韩精品一区二区三区在线播放| 国产天堂亚洲国产碰碰| 亚洲高清免费视频| 国产大陆a不卡| 欧美日韩一区二区欧美激情| 久久久久久电影| 亚洲国产aⅴ成人精品无吗| 国产乱码精品一区二区三区忘忧草| 成人福利视频网站| 91精品国产91久久久久久一区二区 | 91麻豆免费在线观看| 精品国产乱码久久久久久牛牛 | 老司机免费视频一区二区三区| 成人网在线免费视频| 91精品在线一区二区| 国产精品不卡一区二区三区| 久久精品国产**网站演员| 色天天综合色天天久久| 久久久久国产一区二区三区四区| 亚洲成人资源网| 97精品视频在线观看自产线路二| 欧美精品一区二区三区蜜桃| 亚洲成人午夜电影| 色婷婷久久久亚洲一区二区三区| 久久久99精品免费观看不卡| 日本午夜精品视频在线观看 | 五月天久久比比资源色| 99精品视频在线播放观看| 久久久久久**毛片大全| 免费观看成人av| 欧美日韩久久一区二区| 夜夜嗨av一区二区三区网页| 成人午夜激情视频| 久久久亚洲精品石原莉奈| 日本成人超碰在线观看| 欧美日本国产一区| 亚洲综合免费观看高清在线观看| 一本大道久久精品懂色aⅴ| 国产视频一区二区在线| 国产精品综合二区| 久久一夜天堂av一区二区三区| 蜜桃av一区二区| 欧美一区二区精美| 青娱乐精品视频| www精品美女久久久tv| 精品在线你懂的| 精品久久久久久久久久久院品网| 丝袜脚交一区二区| 日韩视频中午一区| 精品一区二区免费视频| 精品国产免费人成电影在线观看四季| 麻豆精品一区二区三区| 欧美精品一区二区三区在线| 国产二区国产一区在线观看| 中文字幕av免费专区久久| 99re免费视频精品全部| 一区二区三区中文字幕电影| 欧美日韩国产首页| 国产一区二区久久| 中文字幕在线免费不卡| 欧美亚洲综合另类| 久久丁香综合五月国产三级网站 | 欧美激情中文字幕一区二区| 成人动漫一区二区| 亚洲成av人片一区二区三区| 日韩一区二区高清| 国产成人a级片| 亚洲欧美一区二区三区孕妇| 欧美视频在线播放| 亚欧色一区w666天堂| 国产麻豆日韩欧美久久| 亚洲国产精品久久久久秋霞影院 | 日本精品视频一区二区| 亚洲高清视频在线| 久久蜜桃av一区二区天堂| 成人国产精品免费网站| 亚洲国产精品一区二区久久| 精品免费99久久| 成人福利视频网站| 亚洲国产精品影院| 中文字幕成人av| 精品视频一区三区九区| 国产成人精品免费看| 午夜不卡av免费| 久久综合av免费| 在线视频综合导航| 国产真实乱偷精品视频免| 亚洲日本一区二区| 久久久亚洲午夜电影| 欧美日韩一区精品| 丰满放荡岳乱妇91ww| 免费一级欧美片在线观看| 国产精品久久久久三级| 日韩免费视频线观看| 欧美撒尿777hd撒尿| 99re这里只有精品首页| 国产一区二区精品在线观看| 视频一区二区中文字幕| 亚洲精品亚洲人成人网在线播放| 久久久不卡网国产精品二区| 欧美日韩不卡一区| 91九色02白丝porn| 99久久精品99国产精品| 国产精品99久久久久久久vr| 青青草原综合久久大伊人精品优势| 亚洲欧美偷拍三级| 中文字幕亚洲不卡| 国产午夜亚洲精品午夜鲁丝片| 欧美精品自拍偷拍动漫精品| 在线免费一区三区| 91网站最新地址| 成人avav在线| kk眼镜猥琐国模调教系列一区二区| 麻豆精品视频在线观看| 午夜精品久久一牛影视| 亚洲综合色视频| 一区二区三区中文字幕精品精品 | 亚洲婷婷在线视频| 中文字幕av一区二区三区高| 久久久99精品久久| 中文字幕va一区二区三区| 国产精品久久久久9999吃药| 久久久99久久精品欧美| 国产婷婷一区二区| 国产精品免费av| 亚洲视频综合在线| 一区二区三区视频在线观看| 亚洲高清不卡在线观看| 日本在线不卡视频| 国产真实乱对白精彩久久| 国产黑丝在线一区二区三区| 成人av在线电影| 色婷婷国产精品综合在线观看| 欧美午夜精品久久久久久孕妇| 日韩欧美一区电影| 国产三级一区二区| 亚洲色图视频网| 日韩免费视频线观看| 欧美一级理论性理论a| 精品国产免费一区二区三区香蕉| 欧美一卡2卡三卡4卡5免费| 蜜臀久久久久久久| 久久电影网电视剧免费观看| 成人晚上爱看视频| 97久久久精品综合88久久| www.99精品| 欧美日韩午夜影院| 欧美一级爆毛片| 1区2区3区欧美| 亚洲成精国产精品女| 亚洲欧美日韩国产另类专区| 伊人婷婷欧美激情| 天天综合日日夜夜精品| 亚洲一级二级在线| 精品一区二区三区免费视频| 国产一区视频导航| 成人av在线资源网站| 91精品国产欧美日韩| 337p日本欧洲亚洲大胆色噜噜| 日本一区二区三区高清不卡| 日韩色在线观看| 国产精品少妇自拍| 亚洲成人激情综合网| 成人午夜激情视频| 69p69国产精品|