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

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

?? dbconnectionmanager.java

?? jsp_serlet的新聞發(fā)布系統(tǒng)
?? JAVA
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
package com.ntsky.pool;

import java.io.*;
import java.sql.*;
import java.util.*;

import com.ntsky.common.*;

/**
 * <p>Title: NTsky新聞發(fā)布v1.0正式版</p>
 * <p>Description: 數(shù)據(jù)庫(kù)連接池</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: NTsky</p>
 * @authory 姚君林
 * @version 1.0
 */

public class DBConnectionManager {
    static private DBConnectionManager instance; //唯一實(shí)例的引用
    static private int clients; //客戶端的連接數(shù)目
    private Vector drivers = new Vector();
    private Hashtable pools = new Hashtable(); //創(chuàng)建一個(gè)Hashtable對(duì)象

    class DBConnectionPool { //定義一個(gè)DBConnectionPool類[如果DBConnectionManager要訪問(wèn)DBConnectionPool必須創(chuàng)建DBConnectionPool的對(duì)象]

        private int checkedOut; //判斷是否還有可用的連接
        private Vector freeConnections = new Vector();//創(chuàng)建一個(gè)freeConnections的數(shù)組
        private int maxConn; //最大連接數(shù)
        private String name; //數(shù)據(jù)庫(kù)連接池名
        private String user; //訪問(wèn)數(shù)據(jù)庫(kù)用戶名
        private String password; //訪問(wèn)數(shù)據(jù)庫(kù)密碼
        private String URL; //數(shù)據(jù)庫(kù)地址
        private PrintWriter log; //日志
        /**
         * 配置文件各項(xiàng)參數(shù)
         * @param name
         * @param url
         * @param user
         * @param password
         * @param maxConn
         */
        public DBConnectionPool(String name, String url, String user,
                                String password, int maxConn) {
            /**
             *配置文件
             */
            this.name = name; //poolname 連接池名
            this.URL = url; //地址
            this.user = user; //用戶名
            this.password = password; //密碼
            this.maxConn = maxConn; //最大的連接數(shù)
            //寫日志
            this.log = new PrintWriter(System.err);
            Debug.writeLog("poolname" + this.name); //7、"poolname" + Connection
            Debug.writeLog("URL: " + this.URL); //8、jdbc:mysql://127.0.0.1:3306/nt
            Debug.writeLog("user: " + this.user); //9、user: skyyjl
            Debug.writeLog("password: " + this.password); //10、password: abc
            Debug.writeLog("maxConn: " + this.maxConn); //11、maxConn: 100
        }

        /**
         * 把空閑的連接登記到連接池由的freeConnection()方法實(shí)現(xiàn)
         * 它的參數(shù)為返回給連接池的連接對(duì)象。該對(duì)象被加入到freeConnections向量的末尾,然后減少已使用連接計(jì)數(shù)。
         * 調(diào)用notifyAll()是為了通知其它正在等待可用連接的線程。
         * @param Conn
         */
        public synchronized void freeConnection(Connection Conn) {
            freeConnections.addElement(Conn);
            checkedOut--;
            notifyAll();
        }

        /**
         * 如連接池中存在可用連接,則直接返回,否則創(chuàng)建新的連接并返回。
         * 如果沒(méi)有可用連接且已有連接總數(shù)等于最大限制數(shù),第一個(gè)方法將直接返回null,
         * 而第二個(gè)方法將等待直到有可用連接為止
         * 所有的可用連接對(duì)象均登記在名為freeConnections的向量(Vector)中。
         * 如果向量中有多于一個(gè)的連接,getConnection()總是選取第一個(gè)。
         * 由于新的可用連接總是從尾部加入向量,從而使得數(shù)據(jù)庫(kù)連接由于長(zhǎng)時(shí)間閑置而被關(guān)閉的風(fēng)險(xiǎn)減低到最小程度。
         *
         * @return Connection
         */
        public synchronized Connection getConnection() {
            Connection con = null;
            if (freeConnections.size() > 0) { //獲取向量中第一個(gè)可用連接
                con = (Connection) freeConnections.firstElement(); //創(chuàng)建第一個(gè)connection,并用設(shè)置為Connection
                freeConnections.removeElementAt(0);
                try {
                    /**
                     * 第一個(gè)getConnection()在返回可用連接給客戶程序之前,調(diào)用了isClosed()方法驗(yàn)證連接仍舊有效。
                     * 如果該連接被關(guān)閉或觸發(fā)異常,getConnection()遞歸地調(diào)用自己以嘗試獲取另外的可用連接。
                     */
                    if (con.isClosed()) { //判斷連接是否關(guān)閉
                        Debug.writeLog("從連接池" + name + "刪除一個(gè)無(wú)效連接");
                        con = getConnection(); //遞歸調(diào)用自己,嘗試再次獲取可用連接
                    }
                }
                catch (SQLException e) {
                    Debug.writeLog("從連接池" + name + "刪除一個(gè)無(wú)效連接"); // 遞歸調(diào)用自己,嘗試再次獲取可用連接
                    con = getConnection();
                }
            }
            /**
             * 如果在向量freeConnections中不存在任何可用連接,getConnection()方法檢查是否已經(jīng)指定最大連接數(shù)限制。
             * 如已經(jīng)指定,則檢查當(dāng)前連接數(shù)是否已經(jīng)到達(dá)極限。此處maxConn為0表示沒(méi)有限制。
             * 如果沒(méi)有指定最大連接數(shù)限制或當(dāng)前連接數(shù)小于該值,該方法嘗試創(chuàng)建新的連接。
             * 如創(chuàng)建成功,則增加已使用連接的計(jì)數(shù)(checkout)并返回,否則返回空值。
             */
            else if (maxConn == 0 || checkedOut < maxConn) {
                con = newConnection(); //創(chuàng)建連接(數(shù)量由maxConn決定)
            }
            if (con != null) { //如果conn(連接數(shù))不為空,判斷就加
                checkedOut++;
            }
            if (con == null) { //如果為空就將con為空寫入日志
                Debug.writeLog(
                    "DBConnectionPool getConnection(), The Returned Con is null");
            }
            return con; //返回連接
        }

        /**
         * 用一個(gè)以毫秒為單位的時(shí)間參數(shù),該參數(shù)表示客戶程序能夠等待的最長(zhǎng)時(shí)間。
         * 建立連接的具體操作仍舊由第一個(gè)getConnection()方法實(shí)現(xiàn)。
         * 參見(jiàn)前一個(gè)getConnection()方法.
         * @param timeout 以毫秒計(jì)的等待時(shí)間限制
         */
        public synchronized Connection getConnection(long timeout) {
            long startTime = new java.util.Date().getTime(); //連接的初始時(shí)間
            Connection con;
            /**
             * 在while循環(huán)中嘗試獲得一個(gè)連接。如果失敗,則以給定的時(shí)間值為參數(shù)調(diào)用wait()。
             * wait()的返回可能是由于其它線程調(diào)用notify()或notifyAll(),也可能是由于預(yù)定時(shí)間已到。
             * 為找出wait()返回的真正原因,程序用當(dāng)前時(shí)間減開(kāi)始時(shí)間(startTime),
             * 如差值大于預(yù)定時(shí)間則返回空值,否則再次調(diào)用getConnection()。
             */
            while ( (con = getConnection()) == null) {
                try {
                    wait(timeout);
                }
                catch (InterruptedException e) {

                }
                if ( (new java.util.Date().getTime() - startTime) >= timeout) { //wait()返回的原因是超時(shí)
                    return null; //連接超時(shí),釋放掉連接
                }
            }
            return con; //返回連接
        }

        private void log(String msg) {
            log.println(new java.util.Date() + ": " + msg);
        }

        /**
         * 將文本信息與異常寫入日志文件
         */
        private void log(Throwable e, String msg) {
            log.println(new java.util.Date() + ": " + msg);
            e.printStackTrace(log);
        }

        /**
         * 創(chuàng)建新連接由newConnection()方法實(shí)現(xiàn)。
         * 創(chuàng)建過(guò)程與是否已經(jīng)指定數(shù)據(jù)庫(kù)帳號(hào)、密碼有關(guān)。
         * JDBC的DriverManager類提供多個(gè)getConnection()方法,這些方法要用到JDBC URL與其它一些參數(shù),如用戶帳號(hào)和密碼等。
         * DriverManager將使用指定的JDBC URL確定適合于目標(biāo)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)程序及建立連接。
         */
        private Connection newConnection() {
            Connection con = null;
            try {
                if (user == null) {
                    con = DriverManager.getConnection(URL); //保持?jǐn)?shù)據(jù)庫(kù)連接加載數(shù)據(jù)庫(kù)驅(qū)動(dòng)程序
                }
                else {
                    con = DriverManager.getConnection(URL, user, password);
                }
                Debug.writeLog("連接池" + name + "創(chuàng)建一個(gè)新的連接"); //21、如果有用戶連接就寫入日志說(shuō)明有用戶創(chuàng)建了連接
            }
            catch (SQLException e) {
                Debug.writeLog("無(wú)法創(chuàng)建下列URL的連接: " + URL);
                e.printStackTrace(System.out);
                return null;
            }
            if (con == null) {
                Debug.writeLog(
                    "DBConnectionPool newConnection(), The Returned Con is null");
            }
            return con;
        }

        /**
         * 實(shí)現(xiàn)的release()方法供DBConnectionManager調(diào)用。
         * 該方法遍歷freeConnections向量并關(guān)閉所有連接,然后從向量中刪除這些連接。

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品一区二区三区四区 | 麻豆久久久久久| 一本到三区不卡视频| 亚洲少妇中出一区| 波多野结衣在线aⅴ中文字幕不卡| 日韩欧美激情一区| 久久精品噜噜噜成人88aⅴ| 精品国产91乱码一区二区三区 | 亚洲地区一二三色| 欧美色综合网站| 亚洲在线视频免费观看| 欧洲激情一区二区| 久久精品国产澳门| 欧美成人aa大片| 国产精品一二三区在线| 337p粉嫩大胆色噜噜噜噜亚洲| 精品一区二区精品| 久久久99精品久久| 99视频精品全部免费在线| 一个色在线综合| 777亚洲妇女| 国产一区二区三区免费| 亚洲嫩草精品久久| 欧美日韩中文字幕一区二区| 美女被吸乳得到大胸91| 日韩欧美国产wwwww| 国产成人免费视频| 亚洲免费观看高清在线观看| 欧美撒尿777hd撒尿| 激情深爱一区二区| 国产一区二区三区观看| 国产中文一区二区三区| 暴力调教一区二区三区| 日本一区二区视频在线观看| 经典三级在线一区| 国模少妇一区二区三区| 国产日韩欧美综合在线| 91久久精品一区二区三| 国模娜娜一区二区三区| 一区二区三区精密机械公司| 欧美一级片免费看| 国产成人综合亚洲91猫咪| 亚洲一卡二卡三卡四卡无卡久久| 欧美一区二区私人影院日本| 国产999精品久久| 午夜精品久久久久久久久久| 久久久蜜臀国产一区二区| 99久久99久久综合| 美女免费视频一区| 亚洲免费观看高清完整版在线 | 在线亚洲一区二区| 捆绑紧缚一区二区三区视频| 7777精品久久久大香线蕉| 粉嫩av亚洲一区二区图片| 亚洲国产成人av网| 中文字幕欧美三区| 久久尤物电影视频在线观看| 欧美艳星brazzers| 成人精品电影在线观看| 亚洲视频在线一区二区| 欧美极品aⅴ影院| 日韩一区二区三区观看| 日本韩国视频一区二区| 99精品在线免费| 国产成人免费av在线| 日韩精品一级中文字幕精品视频免费观看| 久久丝袜美腿综合| 久久久久国产精品麻豆| 在线不卡的av| 欧美日韩国产成人在线91| 91国产免费看| 99久久精品免费精品国产| 久久成人免费网| 亚洲国产一区二区视频| 亚洲国产精品久久久久婷婷884| 国产三级久久久| 精品理论电影在线观看 | 久久精品视频一区二区| 91精品在线一区二区| 色综合久久久网| 96av麻豆蜜桃一区二区| 国产成人亚洲综合a∨猫咪| 亚洲444eee在线观看| 日韩激情在线观看| 午夜成人免费电影| 亚洲电影视频在线| 欧美国产成人在线| 久久亚洲精精品中文字幕早川悠里| 在线观看亚洲精品视频| 91久久精品国产91性色tv| 在线看国产一区二区| 色综合天天天天做夜夜夜夜做| 高清不卡在线观看av| 国产suv精品一区二区6| 99精品国产99久久久久久白柏| a4yy欧美一区二区三区| 99久久精品一区二区| 欧美自拍偷拍一区| 在线免费不卡视频| 欧美私模裸体表演在线观看| 欧美无乱码久久久免费午夜一区| 3d动漫精品啪啪1区2区免费| 在线观看91av| 日韩免费看网站| 91精品国产一区二区| 91精品国产一区二区| 日韩欧美亚洲国产另类| 久久久久久9999| 亚洲综合在线观看视频| 亚洲va欧美va人人爽午夜 | 国内精品视频一区二区三区八戒 | 欧美一级夜夜爽| 精品久久一区二区| 久久精品一二三| 久久久www成人免费毛片麻豆| 久久午夜老司机| 亚洲综合色噜噜狠狠| 麻豆成人91精品二区三区| 国产自产高清不卡| heyzo一本久久综合| 91精品国产色综合久久不卡电影| 欧美www视频| 亚洲视频你懂的| 日韩精品一二三区| 成人小视频免费在线观看| 91久久一区二区| 日韩视频在线观看一区二区| 久久这里只有精品6| 午夜亚洲国产au精品一区二区 | 六月丁香婷婷久久| 另类欧美日韩国产在线| 色狠狠av一区二区三区| 欧美v日韩v国产v| 亚洲免费伊人电影| 亚洲bt欧美bt精品| 高清不卡在线观看av| 欧美精品v国产精品v日韩精品| 国产欧美一区二区三区在线老狼| 亚洲高清久久久| 国产盗摄女厕一区二区三区 | 一区二区三区精品在线| 免费黄网站欧美| 91小视频在线观看| 精品美女在线播放| 首页国产丝袜综合| 欧美性大战久久久久久久| 国产亚洲午夜高清国产拍精品| 日韩精品电影一区亚洲| 91黄色激情网站| 亚洲欧洲99久久| www.亚洲色图| 国产欧美日韩另类一区| 国产一区二区91| 精品国产免费一区二区三区四区 | 久久狠狠亚洲综合| 欧美日韩精品免费| 亚洲午夜精品久久久久久久久| 91蝌蚪国产九色| 国产精品不卡在线| 国产成人a级片| 国产精品视频观看| 国产成人夜色高潮福利影视| 久久久久久久久岛国免费| 国产一区二区三区四区五区美女| 91精品国产欧美一区二区成人| 午夜激情一区二区三区| 678五月天丁香亚洲综合网| 亚洲综合激情另类小说区| 在线免费观看不卡av| 亚洲国产一区二区三区青草影视| 在线观看不卡一区| 亚洲综合色网站| 欧美人与禽zozo性伦| 麻豆精品一区二区三区| 日韩精品一区二区三区视频 | 波多野结衣91| 成人免费视频在线观看| 91在线精品一区二区三区| 中文字幕字幕中文在线中不卡视频| eeuss鲁一区二区三区| 亚洲黄色尤物视频| 欧美性猛片aaaaaaa做受| 亚洲6080在线| 欧美本精品男人aⅴ天堂| 国产真实乱对白精彩久久| 国产亲近乱来精品视频| www.欧美色图| 亚洲成a人片综合在线| 日韩一区二区三区av| 国产成人亚洲综合a∨猫咪| 中文字幕一区二区三区蜜月| 日本道免费精品一区二区三区| 亚洲成人免费视频| 精品久久久久久久人人人人传媒| 国产乱码精品1区2区3区| 中文字幕日本乱码精品影院| 欧美日韩免费高清一区色橹橹 | 精品剧情在线观看| 精品国产乱码久久久久久免费 | 亚洲图片欧美色图|