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

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

?? dbconnectionmanager.java

?? BBS-CS是采用JSP+JavaBean+Servlet開發的一套網絡虛擬社區系統。
?? JAVA
字號:
package com.laoer.bbscs.db;/** * Title:        BBS-CS * Description:  BBS-CS(BBS式虛擬社區系統) * Copyright:    Copyright (c) 2002 * Company:      loveroom.com.cn * @author laoer * @version 3.0 */import java.io.*;import java.sql.*;import java.util.*;import java.util.Date;/*** 管理類DBConnectionManager支持對一個或多個由屬性文件定義的數據庫連接* 池的訪問.客戶程序可以調用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();/*** 返回唯一實例.如果是第一次調用此方法,則創建實例** @return DBConnectionManager 唯一實例*/static synchronized public DBConnectionManager getInstance() {    if (instance == null) {        instance = new DBConnectionManager();    }        clients++;        return instance;}/*** 建構函數私有以防止其它對象創建本類實例*/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);    }}/*** 獲得一個可用的(空閑的)連接.如果沒有可用連接,且已有連接數小于最大連接數* 限制,則創建并返回新連接** @param name 在屬性文件中定義的連接池名字* @return Connection 可用連接或null*/public Connection getConnection(String name) {    DBConnectionPool pool = (DBConnectionPool) pools.get(name);    if (pool != null) {        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;}/*** 關閉所有連接,撤銷驅動程序的注冊*/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);            //log("Deregistered JDBCdriver " + driver.getClass().getName());        }        catch (SQLException e) {            //log(e, "Can not deregistered JDBC driver: " + driver.getClass().getName());        }    }}/*** 根據指定屬性創建連接池實例.** @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("No URL specified for" + poolName);                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("Invalid maxconn value: " + maxconn + " .for: " + poolName);                max = 0;            }            DBConnectionPool pool =            new DBConnectionPool(poolName, url, user, password, max);            pools.put(poolName, pool);            //log("Initialized pool:" + poolName);        }    }}/*** 讀取屬性完成初始化*/private void init() {    InputStream is = getClass().getResourceAsStream("db.properties");    Properties dbProps = new Properties();    try {        dbProps.load(is);    }    catch (Exception e) {        System.err.println("Can not read the properties file; " + "Make sure db.properties is in the Classpath");        return;    }    String logFile = dbProps.getProperty("logfile", "DBConnectionManager.log");    try {        log = new PrintWriter(new FileWriter(logFile, true), true);    }    catch (IOException e) {        System.err.println("Can not open the log files: " + logFile);        log = new PrintWriter(System.err);    }    loadDrivers(dbProps);    createPools(dbProps);}/*** 裝載和注冊所有JDBC驅動程序** @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("Registered JDBC driver:" + driverClassName);        }        catch (Exception e) {            //log("Can not register JDBC driver " + driverClassName + ",Exception:" + 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);}/*** 此內部類定義了一個連接池.它能夠根據要求創建新連接,直到預定的最* 大連接數為止.在返回連接給客戶程序之前,它能夠驗證連接的有效性.*/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;/*** 創建新的連接池** @param name 連接池名字* @param URL 數據庫的JDBC URL* @param user 數據庫帳號,或 null* @param password 密碼,或 null* @param maxConn 此連接池允許建立的最大連接數*/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();}/*** 從連接池獲得一個可用連接.如沒有空閑的連接且當前連接數小于最大連接* 數限制,則創建新連接.如原來登記為可用的連接不再有效,則從向量刪除之,* 然后遞歸調用自己以嘗試新的可用連接.*/public synchronized Connection getConnection() {    Connection con = null;    if (freeConnections.size() > 0) {    // 獲取向量中第一個可用連接        con = (Connection) freeConnections.firstElement();        freeConnections.removeElementAt(0);        try {            if (con.isClosed()) {                //log("Removed bad connection from " + name);                // 遞歸調用自己,嘗試再次獲取可用連接                con = getConnection();            }        }        catch (SQLException e) {            //log("Removed bad connection from " + name);            // 遞歸調用自己,嘗試再次獲取可用連接            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;}/*** 關閉所有連接*/public synchronized void release() {    Enumeration allConnections = freeConnections.elements();    while (allConnections.hasMoreElements()) {        Connection con = (Connection) allConnections.nextElement();        try {            con.close();            //log("Closed connection for pool " + name);        }        catch (SQLException e) {            //log(e, "Can not close connection for pool " + name);        }    }    freeConnections.removeAllElements();}/*** 創建新的連接*/private Connection newConnection() {    Connection con = null;    try {        if (user == null) {            con = DriverManager.getConnection(URL);        }        else {            con = DriverManager.getConnection(URL, user, password);        }        //log("Created a new Connection in pool " + name);    }    catch (SQLException e) {        //log(e, "Can not create a new Connection for " + URL);        return null;    }    return con;}}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美在线不卡| 日韩毛片精品高清免费| 国产精品久久久久久福利一牛影视| 国产精品久久久久影院亚瑟| 婷婷综合另类小说色区| 99精品在线免费| 久久夜色精品国产欧美乱极品| 亚洲精品视频一区| 丁香激情综合国产| 欧美岛国在线观看| 亚洲国产精品一区二区久久| 成人精品免费视频| 久久婷婷色综合| 裸体在线国模精品偷拍| 欧美三级日韩三级国产三级| 中文字幕在线不卡一区二区三区 | 中文字幕日韩精品一区 | 成人免费av资源| 欧美成人a∨高清免费观看| 亚洲香蕉伊在人在线观| 91亚洲国产成人精品一区二三| 欧美精品一区在线观看| 久久国产三级精品| 欧美一区二区视频在线观看| 亚洲第一精品在线| 欧美午夜片在线看| 一区av在线播放| 日本久久电影网| 一区二区三区国产精华| 日本精品免费观看高清观看| 国产精品传媒在线| 99热国产精品| 亚洲人成影院在线观看| 99久久精品99国产精品| 综合在线观看色| 在线观看免费亚洲| 亚洲va中文字幕| 欧美久久久久久蜜桃| 日韩中文欧美在线| 日韩亚洲国产中文字幕欧美| 日韩电影在线免费观看| 日韩欧美一二区| 国产在线视频不卡二| 国产清纯白嫩初高生在线观看91| 国产一区二区三区黄视频| 久久久久久久电影| av不卡在线观看| 亚洲一区二区不卡免费| 欧美日韩精品免费| 狠狠狠色丁香婷婷综合激情| 久久精品在线观看| 色婷婷精品久久二区二区蜜臂av | 国产精品欧美一区喷水| 91女人视频在线观看| 亚洲欧美aⅴ...| 欧美肥大bbwbbw高潮| 久久精工是国产品牌吗| 中文字幕精品—区二区四季| 91视频免费播放| 日本欧美大码aⅴ在线播放| 国产日产欧美一区二区视频| 波多野结衣91| 日韩av电影免费观看高清完整版| 精品国产91亚洲一区二区三区婷婷| 大胆欧美人体老妇| 亚洲国产精品精华液网站| 精品少妇一区二区三区免费观看| 国产成人av一区二区三区在线观看| 亚洲精品自拍动漫在线| 日韩女优电影在线观看| 99久久99久久久精品齐齐| 日韩1区2区3区| 国产精品久久久久久久久快鸭| 在线精品视频免费播放| 紧缚奴在线一区二区三区| ...中文天堂在线一区| 欧美一区二区三区在线| a美女胸又www黄视频久久| 日韩影院免费视频| 亚洲少妇屁股交4| 精品sm捆绑视频| 欧美最猛性xxxxx直播| 国内不卡的二区三区中文字幕| 亚洲激情第一区| 国产偷v国产偷v亚洲高清 | 99r精品视频| 蜜桃av噜噜一区二区三区小说| 国产精品看片你懂得| 日韩欧美亚洲一区二区| 欧美日韩中文字幕一区二区| 成人永久免费视频| 美国十次综合导航| 午夜免费欧美电影| 亚洲欧美日韩在线| 欧美国产1区2区| 26uuu久久天堂性欧美| 69堂国产成人免费视频| 色综合久久久久久久久久久| 国产99精品视频| 黄色日韩网站视频| 日韩高清在线电影| 亚洲大片精品永久免费| 亚洲欧美日韩国产中文在线| 国产无一区二区| 精品99999| 欧美成人一区二区三区在线观看| 欧美日韩一区三区| 在线亚洲人成电影网站色www| 国产ts人妖一区二区| 国产精品一区二区在线播放| 麻豆精品视频在线观看免费| 天天色综合天天| 亚洲成人久久影院| 亚洲高清在线精品| 午夜视频一区二区三区| 香港成人在线视频| 免费人成在线不卡| 裸体一区二区三区| 麻豆精品一区二区三区| 激情都市一区二区| 国产乱码精品一区二区三区av| 国内精品伊人久久久久影院对白| 麻豆精品蜜桃视频网站| 久久97超碰国产精品超碰| 久久99精品国产麻豆不卡| 激情另类小说区图片区视频区| 精品在线视频一区| 国产电影一区在线| 波多野洁衣一区| 欧美色图免费看| 日韩一区二区视频在线观看| 精品国产免费久久| 国产精品欧美一区喷水| 一区二区三区在线看| 日韩av在线发布| 国产成人综合自拍| 色狠狠综合天天综合综合| 欧美制服丝袜第一页| 宅男噜噜噜66一区二区66| 日韩欧美国产系列| 亚洲国产精品99久久久久久久久| 亚洲欧洲一区二区在线播放| 亚洲va欧美va人人爽| 精品一区二区三区在线视频| 成人一区二区三区视频| 欧美综合一区二区三区| 日韩三级在线免费观看| 中文字幕av一区 二区| 一区二区三区成人| 激情综合网天天干| 99精品久久只有精品| 777奇米四色成人影色区| 国产调教视频一区| 亚洲国产成人tv| 国产很黄免费观看久久| 欧美伊人久久大香线蕉综合69| 精品少妇一区二区三区免费观看| 日韩理论片网站| 老司机精品视频在线| 成人美女视频在线观看| 欧美日韩一级片在线观看| 国产午夜一区二区三区| 午夜a成v人精品| aa级大片欧美| 久久影音资源网| 肉色丝袜一区二区| 色综合色综合色综合| 久久老女人爱爱| 天堂久久一区二区三区| 不卡的av在线播放| 亚洲精品一区二区三区香蕉| 五月激情六月综合| 99国产麻豆精品| 精品国产一区久久| 日本最新不卡在线| 欧美日韩色一区| 亚洲免费在线观看视频| 国产传媒欧美日韩成人| 91精品国产综合久久久久久| 一区二区三区日韩欧美| 成人精品免费网站| 国产亚洲人成网站| 精品一区二区三区在线观看 | 亚洲成人免费视| 91国在线观看| 亚洲图片激情小说| 国产高清在线精品| 26uuu久久天堂性欧美| 美女尤物国产一区| 91精品国产免费| 亚洲成a人片在线观看中文| 色欲综合视频天天天| 中文字幕在线不卡一区二区三区| 国产成人精品免费网站| 国产女人aaa级久久久级| 国产综合色在线| 国产夜色精品一区二区av| 国内精品自线一区二区三区视频| 欧美成人在线直播| 国产一区二区在线观看免费|