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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? dbconnectionmanager.java

?? jsp數(shù)據(jù)庫開發(fā)實例精粹全書原代碼 無解壓縮密碼 包括 書店
?? JAVA
字號:
package zhaobiao.db;import java.io.*;import java.sql.*;import java.util.*;import java.util.Date;/**連接池 * 管理類DBConnectionManager支持對一個或多個由屬性文件定義的數(shù)據(jù)庫連接 * 池的訪問.客戶程序可以調(diào)用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();  /**   * 返回唯一實例.如果是第一次調(diào)用此方法,則創(chuàng)建實例   *   * @return DBConnectionManager 唯一實例   */  static synchronized public DBConnectionManager getInstance() {    if (instance == null) {      instance = new DBConnectionManager();    }    clients++;    return instance;  }  /**   * 建構(gòu)函數(shù)私有以防止其它對象創(chuàng)建本類實例   */  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);    }  }  /**   * 獲得一個可用的(空閑的)連接.如果沒有可用連接,且已有連接數(shù)小于最大連接數(shù)   * 限制,則創(chuàng)建并返回新連接   *   * @param name 在屬性文件中定義的連接池名字   * @return Connection 可用連接或null   */  public Connection getConnection(String name) {    DBConnectionPool pool = (DBConnectionPool) pools.get(name);    if (pool != null) {      return pool.getConnection();    }    return null;  }  /**   * 獲得一個可用連接.若沒有可用連接,且已有連接數(shù)小于最大連接數(shù)限制,   * 則創(chuàng)建并返回新連接.否則,在指定的時間內(nèi)等待其它線程釋放連接.   *   * @param name 連接池名字   * @param time 以毫秒計的等待時間   * @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;  }  /**   * 關(guān)閉所有連接,撤銷驅(qū)動程序的注冊   */  public synchronized void release() {// 等待直到最后一個客戶程序調(diào)用    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("撤銷JDBC驅(qū)動程序 " + driver.getClass().getName()+"的注冊");      }      catch (SQLException e) {        log(e, "無法撤銷下列JDBC驅(qū)動程序的注冊: " + driver.getClass().getName());      }    }  }  /**   * 根據(jù)指定屬性創(chuàng)建連接池實例.   *   * @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(0, 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", "0");        int max;        try {          max = Integer.valueOf(maxconn).intValue();        }        catch (NumberFormatException e) {          log("錯誤的最大連接數(shù)限制: " + maxconn + " .連接池: " + poolName);          max = 0;        }        DBConnectionPool pool =            new DBConnectionPool(poolName, url, user, password, max);        pools.put(poolName, pool);        log("成功創(chuàng)建連接池" + 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驅(qū)動程序   *   * @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驅(qū)動程序" + driverClassName);      }      catch (Exception e) {        log("無法注冊JDBC驅(qū)動程序: " +            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);  }  /**   * 此內(nèi)部類定義了一個連接池.它能夠根據(jù)要求創(chuàng)建新連接,直到預(yù)定的最   * 大連接數(shù)為止.在返回連接給客戶程序之前,它能夠驗證連接的有效性.   */  class DBConnectionPool {    private int checkedOut;    private Vector freeConnections = new Vector();    private int maxConn;    private String name;    private String password;    private String URL;    private String user;    /**     * 創(chuàng)建新的連接池     *     * @param name 連接池名字     * @param URL 數(shù)據(jù)庫的JDBC URL     * @param user 數(shù)據(jù)庫帳號,或 null     * @param password 密碼,或 null     * @param maxConn 此連接池允許建立的最大連接數(shù)     */    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 con) {// 將指定連接加入到向量末尾      freeConnections.addElement(con);      checkedOut--;      notifyAll();    }    /**     * 從連接池獲得一個可用連接.如沒有空閑的連接且當(dāng)前連接數(shù)小于最大連接     * 數(shù)限制,則創(chuàng)建新連接.如原來登記為可用的連接不再有效,則從向量刪除之,     * 然后遞歸調(diào)用自己以嘗試新的可用連接.     */    public synchronized Connection getConnection() {      Connection con = null;      if (freeConnections.size() > 0) {// 獲取向量中第一個可用連接        con = (Connection) freeConnections.firstElement();        freeConnections.removeElementAt(0);        try {          if (con.isClosed()) {            log("從連接池" + name+"刪除一個無效連接");// 遞歸調(diào)用自己,嘗試再次獲取可用連接            con = getConnection();          }        }        catch (SQLException e) {          log("從連接池" + name+"刪除一個無效連接");// 遞歸調(diào)用自己,嘗試再次獲取可用連接          con = getConnection();        }      }      else if (maxConn == 0 || checkedOut < maxConn) {        con = newConnection();      }      if (con != null) {        checkedOut++;      }      return con;    }    /**     * 從連接池獲取可用連接.可以指定客戶程序能夠等待的最長時間     * 參見前一個getConnection()方法.     *     * @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) {// wait()返回的原因是超時          return null;        }      }      return con;    }    /**     * 關(guān)閉所有連接     */    public synchronized void release() {      Enumeration allConnections = freeConnections.elements();      while (allConnections.hasMoreElements()) {        Connection con = (Connection) allConnections.nextElement();        try {          con.close();          log("關(guān)閉連接池" + name+"中的一個連接");        }        catch (SQLException e) {          log(e, "無法關(guān)閉連接池" + name+"中的連接");        }      }      freeConnections.removeAllElements();    }    /**     * 創(chuàng)建新的連接     */    private Connection newConnection() {      Connection con = null;      try {        if (user == null) {          con = DriverManager.getConnection(URL);        }        else {          con = DriverManager.getConnection(URL, user, password);        }        log("連接池" + name+"創(chuàng)建一個新的連接");      }      catch (SQLException e) {        log(e, "無法創(chuàng)建下列URL的連接: " + URL);        return null;      }      return con;    }  }}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久中文娱乐网| 一本大道久久a久久精品综合| 欧美一区二区黄| 日本在线不卡一区| 日韩视频一区二区在线观看| 精品一区二区日韩| 久久精品一区二区三区不卡牛牛| 国产精品一级片| ...av二区三区久久精品| 91黄色免费看| 久久精品国产成人一区二区三区| 亚洲精品中文在线影院| 欧美日本韩国一区二区三区视频 | 91麻豆精品91久久久久久清纯 | 日韩电影免费一区| 亚洲精品一区二区三区四区高清| 国产精品 欧美精品| 亚洲色图欧美偷拍| 欧美一级视频精品观看| 国产又黄又大久久| 亚洲男人的天堂在线aⅴ视频| 欧美日韩一区二区三区四区五区| 久久99久久99| 中文字幕亚洲一区二区va在线| 欧美在线三级电影| 免费亚洲电影在线| 中文字幕一区二区三区乱码在线| 欧美日韩亚洲综合一区二区三区| 精品一区二区在线观看| 亚洲欧美日韩中文字幕一区二区三区| 欧美日韩成人综合天天影院| 国产福利一区二区三区视频| 亚洲精品中文在线影院| 欧美精品一区二区精品网| 99国产精品久久久| 九色综合国产一区二区三区| 国产精品免费aⅴ片在线观看| 欧美日产国产精品| 成人h动漫精品一区二区 | 国产一区二三区| 亚洲制服丝袜在线| 欧美国产一区二区| 日韩欧美自拍偷拍| 欧美日韩一区二区三区视频| 久久成人久久爱| 亚洲国产一区二区在线播放| 久久久精品影视| 日韩欧美精品三级| 欧美婷婷六月丁香综合色| 成人在线综合网站| 国产一区二区影院| 奇米亚洲午夜久久精品| 亚洲资源在线观看| 亚洲精品免费一二三区| 国产亚洲欧美激情| 日韩精品一区二区三区四区视频| 欧美日韩一区二区三区免费看| 99精品久久免费看蜜臀剧情介绍| 国产在线不卡一区| 麻豆国产精品一区二区三区| 亚洲成人黄色小说| 亚洲成人自拍网| 亚洲精品国产一区二区精华液 | 欧美日韩国产综合视频在线观看| 成人高清伦理免费影院在线观看| 国产一区二区三区久久悠悠色av| 免费观看30秒视频久久| 日本女人一区二区三区| 午夜久久福利影院| 亚洲成人免费电影| 午夜久久久影院| 午夜精品一区二区三区免费视频| 亚洲韩国精品一区| 亚洲444eee在线观看| 一区二区三区产品免费精品久久75| 国产亚洲欧美日韩在线一区| 久久青草国产手机看片福利盒子| 精品国产91乱码一区二区三区| 日韩免费视频一区| 欧美一区二区福利视频| 欧美一级在线观看| 欧美va亚洲va在线观看蝴蝶网| 欧美精品日韩一区| 日韩三级高清在线| 2020国产精品| 欧美国产精品中文字幕| 国产精品午夜春色av| 亚洲特黄一级片| 亚洲国产毛片aaaaa无费看| 五月天精品一区二区三区| 日韩精品每日更新| 久久丁香综合五月国产三级网站 | 午夜电影网一区| 日韩精品成人一区二区三区| 偷拍自拍另类欧美| 精品伊人久久久久7777人| 国产乱妇无码大片在线观看| 国产盗摄精品一区二区三区在线 | 国产伦精品一区二区三区免费迷 | 精品一区二区在线视频| 国产美女在线观看一区| 成人精品在线视频观看| 99国产精品国产精品久久| 欧美日韩午夜影院| 欧美mv日韩mv国产网站| 国产日韩欧美高清在线| 亚洲视频一区二区免费在线观看| 亚洲综合网站在线观看| 狂野欧美性猛交blacked| 成人国产精品免费网站| 在线精品观看国产| 精品少妇一区二区三区在线播放| 日本一区二区在线不卡| 日韩一区在线看| 久久精品二区亚洲w码| 成人国产精品免费观看视频| 欧美日韩国产一二三| 久久网站热最新地址| 亚洲资源在线观看| 国产伦精品一区二区三区免费| 91久久精品一区二区二区| 日韩一区二区三区电影在线观看 | 亚洲18色成人| 国产精品一品视频| 欧美三级日韩三级| 久久麻豆一区二区| 香蕉影视欧美成人| 成人性生交大片免费看中文网站| 久久美女艺术照精彩视频福利播放| 自拍偷拍欧美激情| 国产在线一区二区综合免费视频| 91视频在线看| 久久久99久久| 蜜臀av一区二区三区| 色婷婷综合在线| 国产精品天美传媒| 精品综合免费视频观看| 欧美综合久久久| 国产精品国产自产拍高清av| 免费成人结看片| 精品视频999| 成人欧美一区二区三区视频网页| 韩国av一区二区三区| 欧美精品久久天天躁| 亚洲人一二三区| 成人综合婷婷国产精品久久蜜臀| 日韩欧美一区二区免费| 天天影视涩香欲综合网| 色综合久久综合中文综合网| 国产午夜精品一区二区三区视频 | 中文字幕精品一区二区三区精品| 午夜激情久久久| 欧美性猛交一区二区三区精品| 国产精品久久久久桃色tv| 国产精品伊人色| 精品1区2区在线观看| 奇米精品一区二区三区四区| 欧美精品久久天天躁| 一区二区久久久久| 欧洲精品一区二区三区在线观看| 18欧美亚洲精品| 99re66热这里只有精品3直播| 欧美高清在线视频| 粉嫩在线一区二区三区视频| 337p日本欧洲亚洲大胆精品| 麻豆久久久久久久| 日韩精品一区二区三区视频播放| 青椒成人免费视频| 日韩欧美色综合| 久久精品国内一区二区三区| 91精品国产综合久久福利软件| 五月激情六月综合| 欧美一区二区观看视频| 久久精品国产在热久久| 久久色在线观看| 成人av在线一区二区三区| 国产精品日韩成人| 972aa.com艺术欧美| 亚洲黄色在线视频| 欧美片网站yy| 精品亚洲免费视频| 欧美激情在线一区二区| av成人免费在线| 亚洲激情av在线| 欧美日韩一区高清| 婷婷成人综合网| 精品国产伦一区二区三区观看体验| 国产乱一区二区| 亚洲日本va午夜在线影院| 欧美日韩中文精品| 九色综合狠狠综合久久| 国产精品区一区二区三区| 在线免费视频一区二区| 日韩在线卡一卡二| 久久精品亚洲国产奇米99| 91女神在线视频| 日韩精品福利网| 欧美激情综合在线| 91福利在线免费观看| 韩国一区二区视频|