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

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

?? dbconnectionmanager.java

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

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

    /**
     *
     * @param props 連接池屬性
     */
    private void createPools(Properties props) {
        Enumeration propNames = props.propertyNames(); //創建枚舉對象----該對象可以想象為一個元素系列,逐次調用其nextElement()方法將順序返回各元素
        while (propNames.hasMoreElements()) { //如果有枚舉對象存在
            String name = (String) propNames.nextElement(); //取出值格式為字符串
            Debug.writeLog("createPools(Properties), name is:  " + name); //3、logPath 將路徑名寫入日志
            /**
             * 在其中搜索名字以“.url”結尾的屬性
             * 對于每一個符合條件的屬性,先提取其連接池名字部分,進而讀取所有屬于該連接池的屬性
             */
            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 寫入數據庫的url"jdbc:mysql://127.0.0.1:3306/數據名"
                if (url == null) { //如果URL為空,寫入日志顯示沒有找到指定的URL
                    Debug.writeLog("沒有為連接池" + 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) {
                    Debug.writeLog("錯誤的最大連接數限制: " + maxconn + " .連接池: " +
                                   poolName);
                    max = 0;
                }
                //創建連接池對象并把它保存在實例變量pools中
                DBConnectionPool pool = new DBConnectionPool(poolName, url, user, password, max);
                //散列表(Hashtable類 )pools實現連接池名字到連接池對象之間的映射,此處以連接池名字為鍵,連接池對象為值。
                pools.put(poolName, pool);
                Debug.writeLog("成功創建連接池" + poolName); //12、成功創建連接池Connection
            }
        }
    }

    /**
     * 將連接對象返回給由名字指定的連接池
     * @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 可用連接或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;
    }

    /**
     * 獲得一個可用連接.若沒有可用連接,且已有連接數小于最大連接數限制,
     * 則創建并返回新連接.否則,在指定的時間內等待其它線程釋放連接.
     * @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;
    }

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

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

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

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

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人免费视频在线观看| 久久精品理论片| 伦理电影国产精品| eeuss鲁片一区二区三区| 欧美一区二区女人| 亚洲一区二区在线免费观看视频| 国模冰冰炮一区二区| 欧美视频一区在线| 亚洲欧美国产三级| 国产很黄免费观看久久| 日韩视频免费直播| 日韩在线卡一卡二| 欧美三级午夜理伦三级中视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 青青青伊人色综合久久| 在线视频中文字幕一区二区| 欧美韩国一区二区| 国产精品主播直播| 久久中文字幕电影| 久久国产精品色| 欧美大片国产精品| 青青草97国产精品免费观看| 欧美丰满美乳xxx高潮www| 亚洲国产综合在线| 欧美日韩不卡一区| 日韩电影一区二区三区四区| 欧美性生活大片视频| 亚洲综合男人的天堂| 色综合咪咪久久| 亚洲卡通欧美制服中文| 91丨porny丨国产| 一区二区三区蜜桃网| 在线一区二区三区| 亚洲国产中文字幕在线视频综合| 色又黄又爽网站www久久| 亚洲蜜臀av乱码久久精品蜜桃| 91成人国产精品| 午夜在线成人av| 日韩欧美国产精品一区| 国产一区在线不卡| 国产精品毛片无遮挡高清| www.欧美亚洲| 一区二区在线看| 欧美疯狂做受xxxx富婆| 欧美bbbbb| 欧美激情一区在线| 91色porny| 视频在线观看一区| 久久综合色8888| 97久久精品人人澡人人爽| 一区二区三区四区视频精品免费| 欧美色男人天堂| 国产一区二区不卡在线| 国产精品久久久久一区| 欧美日韩激情一区二区三区| 美国三级日本三级久久99| 中文字幕精品—区二区四季| 在线观看日韩毛片| 久久超级碰视频| 亚洲人午夜精品天堂一二香蕉| 欧美视频日韩视频在线观看| 国产一区二区三区| 亚洲色图在线视频| 欧美一级国产精品| 波多野结衣一区二区三区 | 欧美日韩中文字幕精品| 久久精品国产**网站演员| 中文字幕免费不卡| 欧美精品在线一区二区| 国产91对白在线观看九色| 亚洲综合色区另类av| 久久欧美中文字幕| 欧美亚洲国产一区在线观看网站| 紧缚奴在线一区二区三区| 亚洲女女做受ⅹxx高潮| 欧美电影免费观看完整版| 色综合久久综合网97色综合| 久久国产综合精品| 一区二区三区国产精华| 欧美国产一区视频在线观看| 91精品国产综合久久久久久久 | 日韩精品一级中文字幕精品视频免费观看 | 国产精品亚洲午夜一区二区三区 | 激情六月婷婷久久| 一区二区三区在线不卡| 国产清纯在线一区二区www| 8v天堂国产在线一区二区| 99久久久精品免费观看国产蜜| 捆绑紧缚一区二区三区视频| 一区二区成人在线视频| 欧美国产成人在线| 精品国产伦一区二区三区观看体验| 欧洲另类一二三四区| 播五月开心婷婷综合| 狠狠色丁香婷综合久久| 日韩国产在线观看一区| 午夜亚洲国产au精品一区二区| 中文字幕一区二区三区不卡| 久久精品视频一区二区三区| 欧美电影免费观看高清完整版 | 日韩不卡免费视频| 午夜精品久久久久久久蜜桃app| 亚洲婷婷在线视频| 亚洲日本乱码在线观看| 国产精品久久久久久户外露出 | 欧美日韩国产三级| 欧美三级视频在线观看| 欧美日韩久久一区二区| 欧美老人xxxx18| 欧美日韩国产一级二级| 欧美日韩电影一区| 日本久久精品电影| 欧洲av在线精品| 欧洲精品一区二区三区在线观看| 91成人在线观看喷潮| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 91麻豆123| 欧美性猛交xxxxxxxx| 欧美色精品在线视频| 91精品国产欧美一区二区成人| 3d动漫精品啪啪1区2区免费 | 国产精品69毛片高清亚洲| 国产精品一区二区在线播放| 国产一区二区精品久久91| 粉嫩av一区二区三区在线播放| caoporm超碰国产精品| 91国产免费观看| 91麻豆精品国产自产在线| 精品国产青草久久久久福利| 国产三级三级三级精品8ⅰ区| 久久精品亚洲精品国产欧美| 成人免费视频在线观看| 亚洲444eee在线观看| 免费日本视频一区| 国产一区二区三区在线观看免费 | 午夜精品aaa| 九九国产精品视频| 成人精品在线视频观看| 91福利区一区二区三区| 日韩精品资源二区在线| 中文字幕 久热精品 视频在线| 亚洲欧洲综合另类| 免费在线看一区| 成人午夜大片免费观看| 欧美日本不卡视频| 26uuu成人网一区二区三区| 中文字幕一区二区三区不卡在线| 视频一区二区三区在线| 国产成人综合亚洲网站| 欧美性大战久久久久久久蜜臀| 欧美成人在线直播| 亚洲精品国产视频| 久久精品99国产国产精| 一本色道久久综合狠狠躁的推荐| 欧美一区二区在线免费播放| 国产精品毛片久久久久久| 日韩国产一二三区| 97久久精品人人做人人爽| 欧美大尺度电影在线| 亚洲乱码中文字幕| 国模套图日韩精品一区二区| 欧美日韩精品欧美日韩精品一| 国产日韩欧美一区二区三区综合| 亚洲国产另类精品专区| 国产福利91精品一区| 欧美一区二区三区视频在线 | 欧美一卡二卡三卡四卡| 粉嫩av一区二区三区| 日韩视频免费直播| 日韩一区二区电影在线| 日韩免费在线观看| 一区二区欧美视频| 国产很黄免费观看久久| 欧美一区二区三区公司| 一区二区三区在线播| 成人丝袜视频网| 精品国产一区二区亚洲人成毛片| 亚洲国产美国国产综合一区二区| av在线播放不卡| 国产日韩一级二级三级| 麻豆精品新av中文字幕| 欧美日韩精品免费| 亚洲大片免费看| 欧美亚男人的天堂| 一区二区三区四区不卡在线 | 91麻豆精品国产自产在线| 亚洲国产精品一区二区久久恐怖片| 成人精品gif动图一区| 久久久久久免费网| 国产精品夜夜爽| 欧美色男人天堂| 波多野结衣中文字幕一区二区三区| 国产精品久久久久三级| 国产69精品久久99不卡| 欧美变态凌虐bdsm| 91性感美女视频| 欧美日韩激情一区二区三区| 亚洲综合丁香婷婷六月香| 97国产一区二区| 中文字幕在线视频一区|