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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? dbconnectionmanager.java~1~

?? jsp數(shù)據(jù)庫(kù)系統(tǒng)
?? JAVA~1~
字號(hào):
package zhaobiao.db;import java.io.*;import java.sql.*;import java.util.*;import java.util.Date;/**連接池 * 管理類(lèi)DBConnectionManager支持對(duì)一個(gè)或多個(gè)由屬性文件定義的數(shù)據(jù)庫(kù)連接 * 池的訪問(wèn).客戶(hù)程序可以調(diào)用getInstance()方法訪問(wèn)本類(lèi)的唯一實(shí)例. */public class DBConnectionManager {  static private DBConnectionManager instance; // 唯一實(shí)例  static private int clients;  private Vector drivers = new Vector();  private PrintWriter log;  private Hashtable pools = new Hashtable();  /**   * 返回唯一實(shí)例.如果是第一次調(diào)用此方法,則創(chuàng)建實(shí)例   *   * @return DBConnectionManager 唯一實(shí)例   */  static synchronized public DBConnectionManager getInstance() {    if (instance == null) {      instance = new DBConnectionManager();    }    clients++;    return instance;  }  /**   * 建構(gòu)函數(shù)私有以防止其它對(duì)象創(chuàng)建本類(lèi)實(shí)例   */  private DBConnectionManager() {    init();  }  /**   * 將連接對(duì)象返回給由名字指定的連接池   *   * @param name 在屬性文件中定義的連接池名字   * @param con 連接對(duì)象   */  public void freeConnection(String name, Connection con) {    DBConnectionPool pool = (DBConnectionPool) pools.get(name);    if (pool != null) {      pool.freeConnection(con);    }  }  /**   * 獲得一個(gè)可用的(空閑的)連接.如果沒(méi)有可用連接,且已有連接數(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;  }  /**   * 獲得一個(gè)可用連接.若沒(méi)有可用連接,且已有連接數(shù)小于最大連接數(shù)限制,   * 則創(chuàng)建并返回新連接.否則,在指定的時(shí)間內(nèi)等待其它線程釋放連接.   *   * @param name 連接池名字   * @param time 以毫秒計(jì)的等待時(shí)間   * @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)閉所有連接,撤銷(xiāo)驅(qū)動(dòng)程序的注冊(cè)   */  public synchronized void release() {// 等待直到最后一個(gè)客戶(hù)程序調(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("撤銷(xiāo)JDBC驅(qū)動(dòng)程序 " + driver.getClass().getName()+"的注冊(cè)");      }      catch (SQLException e) {        log(e, "無(wú)法撤銷(xiāo)下列JDBC驅(qū)動(dòng)程序的注冊(cè): " + driver.getClass().getName());      }    }  }  /**   * 根據(jù)指定屬性創(chuàng)建連接池實(shí)例.   *   * @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("沒(méi)有為連接池" + 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("錯(cuò)誤的最大連接數(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("不能讀取屬性文件. " +                         "請(qǐng)確保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("無(wú)法打開(kāi)日志文件: " + logFile);      log = new PrintWriter(System.err);    }    loadDrivers(dbProps);    createPools(dbProps);  }  /**   * 裝載和注冊(cè)所有JDBC驅(qū)動(dòng)程序   *   * @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("成功注冊(cè)JDBC驅(qū)動(dòng)程序" + driverClassName);      }      catch (Exception e) {        log("無(wú)法注冊(cè)JDBC驅(qū)動(dòng)程序: " +            driverClassName + ", 錯(cuò)誤: " + e);      }    }  }  /**   * 將文本信息寫(xiě)入日志文件   */  private void log(String msg) {    log.println(new Date() + ": " + msg);  }  /**   * 將文本信息與異常寫(xiě)入日志文件   */  private void log(Throwable e, String msg) {    log.println(new Date() + ": " + msg);    e.printStackTrace(log);  }  /**   * 此內(nèi)部類(lèi)定義了一個(gè)連接池.它能夠根據(jù)要求創(chuàng)建新連接,直到預(yù)定的最   * 大連接數(shù)為止.在返回連接給客戶(hù)程序之前,它能夠驗(yàn)證連接的有效性.   */  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ù)庫(kù)的JDBC URL     * @param user 數(shù)據(jù)庫(kù)帳號(hào),或 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 客戶(hù)程序釋放的連接     */    public synchronized void freeConnection(Connection con) {// 將指定連接加入到向量末尾      freeConnections.addElement(con);      checkedOut--;      notifyAll();    }    /**     * 從連接池獲得一個(gè)可用連接.如沒(méi)有空閑的連接且當(dāng)前連接數(shù)小于最大連接     * 數(shù)限制,則創(chuàng)建新連接.如原來(lái)登記為可用的連接不再有效,則從向量刪除之,     * 然后遞歸調(diào)用自己以嘗試新的可用連接.     */    public synchronized Connection getConnection() {      Connection con = null;      if (freeConnections.size() > 0) {// 獲取向量中第一個(gè)可用連接        con = (Connection) freeConnections.firstElement();        freeConnections.removeElementAt(0);        try {          if (con.isClosed()) {            log("從連接池" + name+"刪除一個(gè)無(wú)效連接");// 遞歸調(diào)用自己,嘗試再次獲取可用連接            con = getConnection();          }        }        catch (SQLException e) {          log("從連接池" + name+"刪除一個(gè)無(wú)效連接");// 遞歸調(diào)用自己,嘗試再次獲取可用連接          con = getConnection();        }      }      else if (maxConn == 0 || checkedOut < maxConn) {        con = newConnection();      }      if (con != null) {        checkedOut++;      }      return con;    }    /**     * 從連接池獲取可用連接.可以指定客戶(hù)程序能夠等待的最長(zhǎng)時(shí)間     * 參見(jiàn)前一個(gè)getConnection()方法.     *     * @param timeout 以毫秒計(jì)的等待時(shí)間限制     */    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()返回的原因是超時(shí)          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+"中的一個(gè)連接");        }        catch (SQLException e) {          log(e, "無(wú)法關(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)建一個(gè)新的連接");      }      catch (SQLException e) {        log(e, "無(wú)法創(chuàng)建下列URL的連接: " + URL);        return null;      }      return con;    }  }}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品国模大尺度视频| 亚洲一区免费视频| 欧美三区免费完整视频在线观看| 久久爱www久久做| 洋洋av久久久久久久一区| 久久久久国色av免费看影院| 欧美视频三区在线播放| 丁香六月综合激情| 美女视频免费一区| 亚洲成人免费在线| 亚洲精品欧美激情| 中文字幕亚洲不卡| 欧美激情一区在线| 337p日本欧洲亚洲大胆精品| 欧美精品日韩一区| 在线看国产一区| 99久久夜色精品国产网站| 国产一区二区三区精品视频| 免费看欧美美女黄的网站| 午夜影院在线观看欧美| 亚洲欧美aⅴ...| 日韩一区欧美小说| 中文字幕不卡在线观看| 久久精品视频在线看| 26uuu另类欧美| 精品国精品自拍自在线| 7777精品伊人久久久大香线蕉的| 91美女片黄在线观看91美女| 成人免费不卡视频| 成人激情免费电影网址| 国产精品99久久久久久有的能看| 久久精品国产精品亚洲精品| 美女性感视频久久| 日韩黄色小视频| 日韩中文字幕91| 日韩av电影天堂| 日韩电影一区二区三区四区| 日本欧美一区二区| 欧美a一区二区| 精品一区二区三区在线视频| 蜜臂av日日欢夜夜爽一区| 久久99精品久久久久久动态图| 久久丁香综合五月国产三级网站 | 国产精品免费观看视频| 亚洲精品一区二区三区影院| 久久久久久黄色| 欧美极品aⅴ影院| 一区精品在线播放| 亚洲综合免费观看高清完整版| 亚洲影视在线观看| 天天综合网天天综合色| 日韩电影一区二区三区四区| 激情欧美一区二区三区在线观看| 极品瑜伽女神91| 粉嫩一区二区三区性色av| 91美女视频网站| 91麻豆精品久久久久蜜臀| 欧美一卡二卡三卡四卡| 久久综合九色综合97婷婷| 国产精品素人视频| 亚洲乱码中文字幕| 偷拍一区二区三区| 激情六月婷婷久久| 成人av资源在线观看| 在线观看免费亚洲| 日韩欧美的一区二区| 国产午夜精品在线观看| 亚洲欧美日本韩国| 免费成人深夜小野草| 国产成人午夜视频| 91国偷自产一区二区使用方法| 欧美一区二区三区四区在线观看| 久久在线观看免费| 亚洲人成伊人成综合网小说| 日精品一区二区| 成人精品亚洲人成在线| 欧美人伦禁忌dvd放荡欲情| 久久综合视频网| 亚洲综合图片区| 国产另类ts人妖一区二区| 色噜噜狠狠成人网p站| 337p粉嫩大胆色噜噜噜噜亚洲| 一区二区三区欧美日| 九九视频精品免费| 在线观看国产精品网站| 久久人人97超碰com| 亚洲sss视频在线视频| 成人高清免费在线播放| 91精品婷婷国产综合久久| 国产精品麻豆久久久| 欧美a级一区二区| 在线影院国内精品| 国产亚洲一二三区| 日韩高清不卡在线| 色综合久久综合网| 国产亚洲精久久久久久| 日韩二区三区在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 18欧美乱大交hd1984| 男女激情视频一区| 欧美亚洲综合另类| 国产精品免费av| 麻豆精品国产传媒mv男同| 欧美视频在线一区二区三区 | 美女www一区二区| 欧洲人成人精品| 亚洲欧洲日本在线| 国产一区二区三区在线观看免费| 欧洲国产伦久久久久久久| 亚洲国产精品二十页| 精品一区二区三区在线播放视频| 在线观看成人免费视频| 亚洲色图制服诱惑| a级精品国产片在线观看| 久久久久久日产精品| 久久se这里有精品| 日韩欧美一区二区视频| 日韩av一区二区三区| 欧美日韩中文一区| 亚洲午夜免费视频| 色婷婷av一区二区| 亚洲免费看黄网站| 99精品久久久久久| 1024成人网| 99亚偷拍自图区亚洲| 中文字幕高清不卡| 成人av网站免费观看| 国产精品视频看| 成人av在线电影| 国产精品国产a级| jvid福利写真一区二区三区| 国产蜜臀av在线一区二区三区| 国产精品一区二区三区99| 精品对白一区国产伦| 激情五月播播久久久精品| 久久综合成人精品亚洲另类欧美| 久久精品99久久久| 精品国产欧美一区二区| 黄网站免费久久| 国产三级欧美三级日产三级99| 国产精品一级黄| 国产精品久久久久久久久动漫 | 久久综合久色欧美综合狠狠| 激情综合亚洲精品| 中文在线资源观看网站视频免费不卡| 福利91精品一区二区三区| 亚洲天天做日日做天天谢日日欢| 99riav一区二区三区| 亚洲精品伦理在线| 欧美日韩一级大片网址| 美女视频免费一区| 国产欧美日韩三级| 99精品在线免费| 午夜日韩在线电影| 日韩女优av电影| 成人黄色a**站在线观看| 亚洲日本丝袜连裤袜办公室| 欧美在线看片a免费观看| 免费久久99精品国产| 国产欧美日韩精品a在线观看| 99国产精品国产精品久久| 五月天欧美精品| 欧美成人性福生活免费看| 成人av第一页| 五月婷婷另类国产| 久久久久久一二三区| 色视频成人在线观看免| 日韩精品久久理论片| 国产偷国产偷精品高清尤物 | 国产蜜臀97一区二区三区| 色视频一区二区| 麻豆精品久久精品色综合| 国产精品国产三级国产普通话三级 | 欧美老女人第四色| 国产一区999| 一区二区激情视频| 精品国产成人系列| 色哟哟一区二区| 麻豆国产欧美一区二区三区| 国产精品欧美极品| 欧美日韩1区2区| 成人av小说网| 日韩av中文字幕一区二区三区 | 亚洲一区二区欧美日韩| 精品国产乱码久久久久久闺蜜| 色综合天天综合在线视频| 日本不卡免费在线视频| 国产精品二三区| 26uuu精品一区二区| 欧美天堂一区二区三区| 高清不卡一二三区| 美脚の诱脚舐め脚责91| 樱桃国产成人精品视频| 久久亚洲二区三区| 制服丝袜中文字幕亚洲| 在线观看一区二区视频| 成人av在线播放网站| 国产在线精品免费| 免费成人美女在线观看.| 亚洲亚洲人成综合网络|