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

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

?? dbconnectionmanager.java

?? 本系統(tǒng)是用java開發(fā)的一個新聞發(fā)布系統(tǒng)
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
         */
        public synchronized void release() {
            Enumeration allConnections = freeConnections.elements();
            while (allConnections.hasMoreElements()) { //freeConnections對象存在
                Connection con = (Connection) allConnections.nextElement(); //取出所有的數(shù)組
                try {
                    con.close(); //嘗試關(guān)閉
                    Debug.writeLog("關(guān)閉連接池" + name + "中的一個連接");
                }
                catch (SQLException e) {
                    Debug.writeLog("無法關(guān)閉連接池" + name + "中的連接");
                    e.printStackTrace(System.out);
                }
            }
            freeConnections.removeAllElements(); //清空
        }
    }

    /**
     * *****************************************************************
     * 建構(gòu)函數(shù)私有以防止其它對象創(chuàng)建本類實例
     * 其它對象能夠調(diào)用其靜態(tài)方法(也稱為類方法)獲得該唯一實例的引用
     * DBConnectionManager類的建構(gòu)函數(shù)是私有的,這是為了避免其它對象創(chuàng)建該類的實例。
     */
    private DBConnectionManager() {
        init();
    }

    /**
     *
     * @param props 連接池屬性
     */
    private void createPools(Properties props) {
        Enumeration propNames = props.propertyNames(); //創(chuàng)建枚舉對象----該對象可以想象為一個元素系列,逐次調(diào)用其nextElement()方法將順序返回各元素
        while (propNames.hasMoreElements()) { //如果有枚舉對象存在
            String name = (String) propNames.nextElement(); //取出值格式為字符串
            Debug.writeLog("createPools(Properties), name is:  " + name); //3、logPath 將路徑名寫入日志
            /**
             * 在其中搜索名字以“.url”結(jié)尾的屬性
             * 對于每一個符合條件的屬性,先提取其連接池名字部分,進(jìn)而讀取所有屬于該連接池的屬性
             */
            if (name.endsWith(".url")) {
                Debug.writeLog("createPools(Properties), name end with url"); //5
                String poolName = name.substring(0, name.lastIndexOf(".")); //取出“.”之前的字符串(連接池的名字)
                String url = props.getProperty(poolName + ".url"); //4、Connection.url 取得URL
                Debug.writeLog("createPools(Properties), url is " + url); //6、jdbc:mysql://127.0.0.1:3306/nt 寫入數(shù)據(jù)庫的url"jdbc:mysql://127.0.0.1:3306/數(shù)據(jù)名"
                if (url == null) { //如果URL為空,寫入日志顯示沒有找到指定的URL
                    Debug.writeLog("沒有為連接池" + poolName + "指定URL");
                    continue; //跳出本次循環(huán)
                }
                String user = props.getProperty(poolName + ".user"); //用戶名
                String password = props.getProperty(poolName + ".password"); //密碼
                String maxconn = props.getProperty(poolName + ".maxconn", "0"); //最大連接數(shù)
                int max; //定義一個整形變量
                try {
                    max = Integer.valueOf(maxconn).intValue(); //取得最大連接數(shù)的值
                }
                catch (NumberFormatException e) {
                    Debug.writeLog("錯誤的最大連接數(shù)限制: " + maxconn + " .連接池: " +
                                   poolName);
                    max = 0;
                }
                //創(chuàng)建連接池對象并把它保存在實例變量pools中
                DBConnectionPool pool = new DBConnectionPool(poolName, url, user, password, max);
                //散列表(Hashtable類 )pools實現(xiàn)連接池名字到連接池對象之間的映射,此處以連接池名字為鍵,連接池對象為值。
                pools.put(poolName, pool);
                Debug.writeLog("成功創(chuàng)建連接池" + poolName); //12、成功創(chuàng)建連接池Connection
            }
        }
    }

    /**
     * 將連接對象返回給由名字指定的連接池
     * @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) {
            Debug.writeLog(
                "DBConnectionManager getConnection(String) ! pool is not null !"); //20
            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;
    }

    /**
     * 其引用就一直保存在靜態(tài)變量instance中
     * 每次調(diào)用getInstance()都增加一個DBConnectionManager的客戶程序計數(shù)。
     * 該計數(shù)代表引用DBConnectionManager唯一實例的客戶程序總數(shù),它將被用于控制連接池的關(guān)閉操作。
     * @return 返回唯一實例.如果是第一次調(diào)用此方法,則創(chuàng)建實例
     */
    public static synchronized DBConnectionManager getInstance() {
        if (instance == null) {
            instance = new DBConnectionManager();
        }
        clients++; //對客戶端的訪問計數(shù)
        return instance;
    }

    /**
     * 讀取屬性完成初始化
     */
    private void init() {
        //[配置文件路徑(ISiteEnvironment.ConfigFile)]調(diào)用EnvironmentConfig的getProperties()方法
        Properties dbProps = EnvironmentConfig.getInstance().getProperties(
            ISiteEnvironment.ConfigFile);
        loadDrivers(dbProps); //裝載驅(qū)動
        createPools(dbProps); //調(diào)用私有方法createPools()創(chuàng)建連接池對象
    }

    /**
     * 裝載和注冊所有JDBC驅(qū)動程序
     * 該方法先用StringTokenizer將drivers屬性值分割為對應(yīng)于驅(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(); //取得驅(qū)動程序org.gjt.mm.mysql.Driver
            try {
                Driver driver = (Driver) Class.forName(driverClassName).
                    newInstance();
                DriverManager.registerDriver(driver);
                Debug.writeLog("Load Driver Success !"); //1、加載驅(qū)動成功
                drivers.addElement(driver);
                Debug.writeLog("成功注冊JDBC驅(qū)動程序" + driverClassName); //2、加載JDBC驅(qū)動程序org.gjt.mm.mysql.Driver
            }
            catch (Exception e) {
                Debug.writeLog("無法注冊JDBC驅(qū)動程序: " + driverClassName + ", 錯誤: " +  e);
            }
        }
    }

    /**
     * 客戶程序在關(guān)閉時調(diào)用release()可以遞減該計數(shù)。
     * 當(dāng)最后一個客戶程序調(diào)用release(),遞減后的引用計數(shù)為0,就可以調(diào)用各個連接池的release()方法關(guān)閉所有連接了。
     * 關(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);
                Debug.writeLog("撤銷JDBC驅(qū)動程序 " + driver.getClass().getName() + "的注冊");
            }
            catch (SQLException e) {
                Debug.writeLog("無法撤銷下列JDBC驅(qū)動程序的注冊: " + driver.getClass().getName());
                e.printStackTrace(System.out);
            }
        }
    }
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
粉嫩欧美一区二区三区高清影视| 国产成人在线色| 国产精品一区一区| 欧美亚一区二区| 国产日产欧美一区二区视频| 秋霞av亚洲一区二区三| 色综合激情五月| 国产亚洲精品7777| 久久www免费人成看片高清| 在线免费观看日本欧美| 中文字幕+乱码+中文字幕一区| 国产成a人亚洲精| 91精品欧美福利在线观看| 亚洲男同性恋视频| av在线不卡电影| 中文字幕电影一区| 国产99精品在线观看| 欧美v日韩v国产v| 日产精品久久久久久久性色| 欧美综合亚洲图片综合区| 亚洲精品免费电影| 99久久精品国产毛片| 国产精品久久久久一区| 国产成人无遮挡在线视频| 久久久久青草大香线综合精品| 日韩电影在线观看一区| 欧美日韩国产另类不卡| 亚洲444eee在线观看| 欧美网站大全在线观看| 亚洲电影在线播放| 欧美日韩一二三区| 午夜精品福利久久久| 欧美日韩一区成人| 日本一区中文字幕| 欧美tickling网站挠脚心| 久久av资源网| 国产拍揄自揄精品视频麻豆| 成人免费av在线| 1024亚洲合集| 欧美亚洲国产一卡| 日韩国产一二三区| 日韩一区二区麻豆国产| 国产河南妇女毛片精品久久久| 久久精品一区二区三区不卡| 成人夜色视频网站在线观看| 国产精品视频看| 日本道精品一区二区三区| 午夜电影一区二区| 日韩女优av电影| 国产成人av影院| 亚洲另类春色国产| 欧美一区二区三区啪啪| 国产精品系列在线播放| 国产精品久久久久久亚洲毛片 | 麻豆成人久久精品二区三区小说| 欧美一区二区人人喊爽| 国产一区二区三区免费观看| 亚洲欧美另类小说| 91精品国产乱码| 国产黄色精品网站| 一区二区三区精品在线观看| 91精品婷婷国产综合久久| 国产成人综合视频| 亚洲综合一二区| 日韩午夜激情免费电影| 不卡欧美aaaaa| 肉丝袜脚交视频一区二区| 久久久久久久久久久久电影| 在线观看亚洲专区| 久久狠狠亚洲综合| 一区二区三区免费在线观看| 精品毛片乱码1区2区3区| 色88888久久久久久影院按摩| 免费久久精品视频| 一区二区三区91| 国产欧美精品一区| 一区二区三区小说| 欧美xxxx在线观看| 欧美系列一区二区| 成人综合在线观看| 免费成人在线影院| 一区二区三区在线观看视频| 久久久精品tv| 欧美va亚洲va| 欧美人动与zoxxxx乱| 91蜜桃视频在线| 国产美女娇喘av呻吟久久| 亚洲成av人片一区二区| 国产精品不卡一区| 国产亚洲污的网站| 日韩精品一区二区三区老鸭窝 | 亚洲超碰精品一区二区| 中文字幕不卡一区| 日韩女优毛片在线| 91精品国产综合久久精品性色| 91天堂素人约啪| av在线不卡电影| 成人性生交大片免费看视频在线| 美女一区二区三区在线观看| 五月激情综合婷婷| 亚洲第一激情av| 亚洲综合999| 一区二区三区精品视频在线| 亚洲女同一区二区| 亚洲三级电影全部在线观看高清| 欧美激情一区二区三区蜜桃视频| 日韩欧美一二三区| 精品日产卡一卡二卡麻豆| 日韩欧美一级二级三级久久久| 欧美一区二区三区的| 337p亚洲精品色噜噜| 欧美性色综合网| 欧美午夜精品久久久久久孕妇| 91黄视频在线观看| 欧美三级电影精品| 欧美一区二区视频观看视频| 欧美日韩精品一区二区在线播放 | 成人18视频在线播放| 丁香六月久久综合狠狠色| 国产乱一区二区| 成人午夜激情影院| 色综合 综合色| 在线观看日产精品| 91麻豆精品国产91久久久久| 3atv一区二区三区| 久久影视一区二区| 国产精品久久久久一区二区三区共 | 蜜桃视频在线一区| 久久国产免费看| 国产精品中文有码| 91在线看国产| 欧美日韩国产色站一区二区三区| 欧美一二三四区在线| 国产日韩高清在线| 一区二区三区在线免费视频| 五月天婷婷综合| 韩国女主播成人在线观看| 成人毛片老司机大片| 日本久久一区二区三区| 欧美一级片免费看| 国产精品色在线| 视频一区二区欧美| 国产成人无遮挡在线视频| 色婷婷精品大在线视频| 日韩一区二区视频| 国产精品久久久99| 日本欧美一区二区| 成人av电影在线播放| 欧美一级高清大全免费观看| 国产日韩欧美电影| 天天色天天操综合| 成人精品免费网站| 91精品国产91久久久久久一区二区 | 成人高清免费观看| 欧美精品久久天天躁| 国产精品网曝门| 免费成人在线网站| 99久久er热在这里只有精品66| 欧美浪妇xxxx高跟鞋交| 国产欧美视频一区二区| 男男成人高潮片免费网站| 99久久婷婷国产| 精品国产凹凸成av人网站| 一区二区三区精密机械公司| 久久99国内精品| 欧美性猛片aaaaaaa做受| 亚洲国产岛国毛片在线| 久久精品国产一区二区三区免费看| 色域天天综合网| 日本一区免费视频| 韩日精品视频一区| 制服丝袜中文字幕亚洲| 亚洲免费观看高清完整版在线| 国产原创一区二区三区| 在线不卡免费欧美| 亚洲欧美激情在线| 懂色av一区二区夜夜嗨| 欧美一区二区高清| 亚洲18女电影在线观看| 91在线丨porny丨国产| 欧美激情一二三区| 国产成人自拍高清视频在线免费播放| 欧美日韩不卡视频| 一区二区三区.www| 色噜噜偷拍精品综合在线| 国产精品色呦呦| 成人手机在线视频| 日本一区二区三区国色天香| 韩国成人福利片在线播放| 日韩一级成人av| 日韩黄色片在线观看| 欧美久久久影院| 午夜精品福利视频网站| 欧美日韩免费视频| 亚洲成人精品一区| 制服丝袜激情欧洲亚洲| 视频一区国产视频| 日韩视频免费观看高清完整版在线观看| 亚洲成人777| 日韩片之四级片|