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

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

?? dbconnectionmanager.java

?? 設(shè)備管理系統(tǒng) 包括設(shè)備管理
?? JAVA
字號(hào):
/**
 *  Title  pams
 *  @author: dzc
 *  Company: hust
 *  @version 1.0
 *  Date  :   2006-04
 *  DBConnectionManager.java
 **/

package pams.database;

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

public class DBConnectionManager {
	static private DBConnectionManager instance; // 唯一實(shí)例

	static private int clients;

	private Vector drivers = new Vector();

	private Hashtable pools = new Hashtable();

	/**
	 * 將文本信息在后臺(tái)打印出來
	 */
	private void log(String msg) {
		 System.out.println(new Date() + ": " + msg);
	}

	/**
	 * 返回唯一實(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)建本類實(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è)可用的(空閑的)連接.如果沒有可用連接,且已有連接數(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è)可用連接.若沒有可用連接,且已有連接數(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)閉所有連接,撤銷驅(qū)動(dòng)程序的注冊(cè)
	 */
	public synchronized void release() {
		// 等待直到最后一個(gè)客戶程序調(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("撤銷JDBC驅(qū)動(dòng)程序 " + driver.getClass().getName() + "的注冊(cè)");
			} catch (SQLException e) {
				log("無法撤銷下列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 = "sqlserver";
				String url = props.getProperty(poolName + ".url");
				if (url == null) 
				{
					log("沒有為連接池" + 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("/pams.txt");
		Properties dbProps = new Properties();
		try {
			dbProps.load(is);
		} catch (Exception e) {
			log("不能讀取屬性文件.請(qǐng)確保db.properties在CLASSPATH指定的路徑中");
			return;
		}
		loadDrivers(dbProps);
		createPools(dbProps);
	}

	/**
	 * 裝載和注冊(cè)所有JDBC驅(qū)動(dòng)程序
	 * 
	 * @param props
	 *            屬性
	 */
	private void loadDrivers(Properties props) {
		String driverClasses = props.getProperty("driver");
		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("無法注冊(cè)JDBC驅(qū)動(dòng)程序: " + driverClassName + ", 錯(cuò)誤: " + e);
			}
		}
	}

	
	/**
	 * 此內(nèi)部類定義了一個(gè)連接池.它能夠根據(jù)要求創(chuàng)建新連接,直到預(yù)定的最大連接數(shù)為止.在返回連接給客戶程序之前,它能夠驗(yàn)證連接的有效性.
	 */
	class DBConnectionPool {
		private int userCount;

		private Vector freeConnections = new Vector();

		private int maxConn;

		private String name;

		private String password;

		private String URL;

		private String user;

//		private String databaseUrl;

		/**
		 * 創(chuàng)建新的連接池
		 * 
		 * @param name
		 *            連接池名字
		 * @param URL
		 *            數(shù)據(jù)庫的JDBC URL
		 * @param user
		 *            數(shù)據(jù)庫帳號(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
		 *            客戶程序釋放的連接
		 */
		public synchronized void freeConnection(Connection con) {
			// 將指定連接加入到向量末尾
			freeConnections.addElement(con);
			userCount--;
			notifyAll();
		}

		/**
		 * 從連接池獲得一個(gè)可用連接.如沒有空閑的連接且當(dāng)前連接數(shù)小于最大連接 數(shù)限制,則創(chuàng)建新連接.如原來登記為可用的連接不再有效,則從向量刪除之,
		 * 然后遞歸調(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è)無效連接");
						// 遞歸調(diào)用自己,嘗試再次獲取可用連接
						con = getConnection();
					}
				} catch (SQLException e) {
					log("從連接池" + name + "刪除一個(gè)無效連接");
					// 遞歸調(diào)用自己,嘗試再次獲取可用連接
					con = getConnection();
				}
			} else if (maxConn == 0 || userCount < maxConn) {
				con = newConnection();
			}
			if (con != null) {
				userCount++;
			}
			return con;
		}

		/**
		 * 從連接池獲取可用連接.可以指定客戶程序能夠等待的最長(zhǎng)時(shí)間 參見前一個(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("無法關(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("無法創(chuàng)建下列URL的連接: " + URL);
				return null;
			}
			return con;
		}

	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆国产精品久久| 国产精品人妖ts系列视频| 久久亚区不卡日本| 国产精品美女久久久久av爽李琼| 亚洲欧美另类在线| 日本伊人精品一区二区三区观看方式| 久久国产婷婷国产香蕉| www.亚洲精品| 制服.丝袜.亚洲.另类.中文| 国产性色一区二区| 亚洲成人av一区二区三区| 国产乱对白刺激视频不卡| 色综合久久综合网欧美综合网| 欧美一区二区三区视频在线观看| 国产欧美一区二区三区网站| 亚洲一区二区三区自拍| 国产精品18久久久| 欧美日韩一区二区在线视频| 日本一区二区视频在线| 日韩av一区二区在线影视| 成人午夜精品一区二区三区| 欧美一卡二卡在线| 日韩毛片视频在线看| 蜜桃视频第一区免费观看| 97久久超碰精品国产| 欧美mv日韩mv亚洲| 亚洲国产va精品久久久不卡综合| 国产夫妻精品视频| 7777精品伊人久久久大香线蕉完整版| 欧美国产激情二区三区| 青青草一区二区三区| 色系网站成人免费| 国产农村妇女毛片精品久久麻豆| 秋霞午夜av一区二区三区| 91精品福利在线| 国产精品热久久久久夜色精品三区| 免费成人在线网站| 欧美视频在线观看一区| 中文在线资源观看网站视频免费不卡 | 国产精品色在线| 美女视频一区在线观看| 在线亚洲欧美专区二区| 国产欧美一区二区三区鸳鸯浴| 美女在线视频一区| 欧美日韩国产中文| 亚洲综合久久久| 99久久精品费精品国产一区二区| 另类的小说在线视频另类成人小视频在线| 91视视频在线观看入口直接观看www | 亚洲另类中文字| 国产jizzjizz一区二区| 欧美xxxxxxxx| 免费的成人av| 欧美一区日本一区韩国一区| 亚洲一区二区三区免费视频| 色妹子一区二区| 中文字幕在线免费不卡| 成人污污视频在线观看| 久久亚洲精品小早川怜子| 日本 国产 欧美色综合| 91精品国产美女浴室洗澡无遮挡| 亚洲制服丝袜av| 欧亚一区二区三区| 一区二区高清免费观看影视大全| 97久久超碰国产精品电影| 亚洲欧美在线高清| 91色porny在线视频| 国产精品久久午夜夜伦鲁鲁| 丁香婷婷综合色啪| 国产精品国产三级国产普通话蜜臀| 国产不卡免费视频| 国产欧美日本一区视频| 成人性生交大片免费看中文网站| 欧美极品少妇xxxxⅹ高跟鞋| 国产白丝精品91爽爽久久 | 99久久er热在这里只有精品15| 国产精品视频线看| 成人av网址在线| 亚洲欧洲精品成人久久奇米网| av不卡免费电影| 亚洲另类一区二区| 欧美吞精做爰啪啪高潮| 婷婷开心久久网| 欧美大片拔萝卜| 国产精品一区二区不卡| 中文av字幕一区| 91在线视频免费91| 亚洲成av人片www| 欧美白人最猛性xxxxx69交| 国产在线视频精品一区| 欧美激情综合在线| 91麻豆精品在线观看| 亚洲国产精品一区二区www在线| 91精品国产综合久久精品| 久久精品二区亚洲w码| 国产亚洲一区二区三区| 99re6这里只有精品视频在线观看| 亚洲综合一二三区| 欧美一区二区啪啪| 国产宾馆实践打屁股91| 亚洲最大色网站| 69堂精品视频| 国产成人精品亚洲午夜麻豆| 亚洲欧洲综合另类| 欧美一区二区三区四区久久| 国产精品亚洲午夜一区二区三区 | 色哟哟日韩精品| 日韩av电影天堂| 国产欧美在线观看一区| 色综合久久久久综合体桃花网| 亚洲第一电影网| 国产亚洲综合在线| 欧美日韩一区在线| 国产精品亚洲一区二区三区在线 | 91传媒视频在线播放| 日韩黄色片在线观看| 久久一夜天堂av一区二区三区| 不卡的av电影在线观看| 性久久久久久久久| 欧美激情一区不卡| 欧美日韩高清在线播放| 国产69精品久久99不卡| 亚洲午夜精品在线| 国产情人综合久久777777| 欧美午夜精品久久久久久孕妇| 国产乱国产乱300精品| 亚洲国产成人tv| 国产精品久久看| 666欧美在线视频| 97久久超碰精品国产| 精品一区二区三区视频在线观看 | 欧美日韩综合一区| 国产精品性做久久久久久| 一区二区三区日韩欧美精品| 精品乱人伦小说| 欧美日韩一区二区三区免费看| 国产精品99久久久久久久vr| 丝袜亚洲另类欧美综合| 中文字幕一区免费在线观看| 日韩免费高清av| 色狠狠桃花综合| 国产suv精品一区二区883| 麻豆一区二区三区| 一区二区三区中文字幕| 国产亚洲欧美在线| 精品少妇一区二区三区在线视频 | 日韩国产精品久久久久久亚洲| 中文字幕亚洲欧美在线不卡| 精品理论电影在线| 日韩一卡二卡三卡四卡| 欧美调教femdomvk| 91在线观看视频| 成人av电影在线网| 国产麻豆视频精品| 理论片日本一区| 日本欧美一区二区在线观看| 亚洲一区二三区| 亚洲欧美一区二区不卡| 中文字幕一区不卡| 国产精品私人影院| 久久久不卡网国产精品一区| 日韩亚洲欧美综合| 在线不卡欧美精品一区二区三区| 91久久精品一区二区二区| av网站一区二区三区| 国产丶欧美丶日本不卡视频| 国产美女在线观看一区| 久久99国产精品免费网站| 人人超碰91尤物精品国产| 午夜精品影院在线观看| 亚洲一本大道在线| 一区二区三区精品| 亚洲精品精品亚洲| 亚洲精品福利视频网站| 亚洲另类中文字| 亚洲黄色片在线观看| 一区二区三区四区国产精品| 玉米视频成人免费看| 一区二区视频免费在线观看| 日韩理论片网站| 亚洲精品自拍动漫在线| 樱花影视一区二区| 亚洲国产精品久久久久秋霞影院 | 欧美一区二区三区不卡| 欧美一个色资源| 精品不卡在线视频| 久久嫩草精品久久久精品一| 国产日产欧美一区| 国产精品国产三级国产专播品爱网 | 日本在线不卡视频一二三区| 秋霞午夜av一区二区三区| 九九视频精品免费| 国产一级精品在线| 成人国产精品免费网站| 91在线观看免费视频| 欧美日韩国产小视频在线观看| 欧美色综合天天久久综合精品| 欧美日韩国产天堂| 欧美成人精品福利| 日本一区二区免费在线观看视频|