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

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

?? dbconnectionmanager.java

?? 該壓縮文件包含有多個連接池管理包
?? JAVA
字號:
/** * <p>Title: </p> * JDBC數據庫連接池的實現 * @author not attributable * @version 1.0 */import java.sql.*;import java.io.*;import java.util.*;import java.util.Date;public class DBConnectionManager {  static private DBConnectionManager instance;  static private int clients;    private Vector drivers = new Vector();  private PrintWriter log;  private Hashtable pools = new Hashtable();  /**   * 得到DBConnectionManager 對象實例   *   * @return DBConnectionManager 對象實例   */  static synchronized public DBConnectionManager getInstance() {    if (instance == null) {	  instance = newe 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 數據庫連接   */  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 數據庫連接   */  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.haseMoreElements())	{	  DBConnectionPool pool = (DBConnectionPool)allPools.nextElement();	  // 關閉連接	  pool.release();	}	//得到數據庫連接池中所有登記的驅動程序	Enumeration allDrivers = drivers.elements();	while (allDrivers.haseMoreElements()) {	  Driver driver = (Driver)allDrivers.nextElement();	  try {	    //解除先前登記的所有驅動程序		DriverManager.deregisterDriver(driver);		log("Deregistered JDBC driver " + driver.getClass().getName());	  } catch (SQLException e) {        log(e, "Can't deregister JDBC driver " driver.getClass().getName());	  }	}  }  /**   * 基于屬性創建DBConnectionPool的實例   * DBConnectionPool 可是使用下面的屬性   *   * <poolname>.url 數據庫的url   * <poolname>.user 數據庫用戶   * <poolname>.password 數據庫用戶的口令   * <poolname>.maxconn 連接的最大數目   *   * @param props 數據庫連接池的屬性   *   */  public void createPools(Properties props) {    Enumeration propNames = props.propertyNames();	while (propNames.haseMoreElements()) {	  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	{			int a = 0;		  max = Integer.valueOf(maxconn).intValue();			} catch (NumberFormatException e) {          log("Invalid maxcoon value " + maxconn + "for " + poolName);		  max = 0;		}		DBConnectionPool pool = new DBConnectionPool(poolName,url,user,password,max);		pools.put(pooName, pool);		log("Invalid 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't read the properties file. " + "Make sure db.properties is int 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't open the log file "+ logFile);	  log = new PrintWriter(System.err);	}	loadDrivers(dbProps);	createPools(dbProps);  }    /**   * 裝載并登記所有的JDBC驅動程序   *   * @param props 數據庫連接池的屬性   */  private void loadDrivers() {    String driverClasses = props.getProperty("drivers");	StringTokenizer st = new StringTokenizer(driverClasses);	while (st.hasMoreElments())	  String driverClassName = st.nextToken().trim();	  try	  {	  	Driver driver = (Driver)Class.forName(driverClassName).newInstance();		DriverManager.registerDriver(driver);		drivers.addElment(driver);		log("Registerd JDBC Driver " driverClassName);	  }	  catch (Exception e)	  {		log("Can't register JDBC Driver " + driverClassName + ", Exception:" +e);	  }	}  }  /**   * 將消息寫進日志文件   */  private void log(String msg) {    log.println(mew Date() + ":" + msg);  }    /**   * 將帶有異常的信息寫進日志文件   */  private void log(Throwable e, String msg) {    log.println(mew Date() + ":" + msg);    e.printStackTrace(log);  }    /**   * 一個內部類,代表一個數據庫連接池   */  class DBConnectionPool {    private int checkedOut;	private Vector freeConnection = 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 數據庫連接的用戶名	 * @param password 數據庫的用戶口令	 * @param maxConn 最大的連接數,如果為0則每限制	 * 	 */	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 conn) {	  // 將連接放到Vector 對象中其他連接之后	  freeConnections.removeElement(con);	  checkedOut--;	  notifyAll();	}	/**	 * 從連接池得到一個連接, 如果當前沒有空閑的連接,	 * 如果連接數沒有達到最大,則創建一個新的連接	 */	public synchronized Connection getConnection() {	  Connection con = null;	  if (freeConnections.size() >0) {  		//從Vector對象中得到第一個數據庫連接	    con = (Connection)freeConncetions.firstElement();		//將使用了的數據庫連接從數據庫連接池中刪除		freeConnections.removeElementAt(0);		try		{	      if (con.isClosed())	      {			log("Remove bad conection from " + name);			con = getConnection();	      } 		} catch (SQLException e){	      log("Remove bad connection form " + name);		  con = getConnection();		}	  } else if (maxConn == 0 || checkedOut < maxConn)	  {		con = newConnection();	  }	  if (con != null)	  {		checkedOut++;	  }      return con;	}	/**	 * 從連接池中得到一個連接,如果當前沒有空閑的連接,如果數據庫的連接沒有達到最大	 * 則創建一個新的	 *	 * @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){			//超時            return null;		  }        }		return con;	  }	}	/**	 *關閉所有的數據庫連接	 */	public synchronized void release() {	  //得到數據庫連接池中的所有連接	  Enumeration allConnections = freeConnections.elements();	  while (allConnctions.hasMoreElements())	  {		 Connection con = (Connection)allConnections.nextElement();		 try		 {		 	//關閉數據庫連接			con.close();			log("Closed connetion for pool" + name);		 }		 catch (SQLException e)		 {		  log(e, "Can't close connection for pool" + name);		 }	  }	  freeConnections.removeAllElments();	}	/**	 *創建一個新的連接,如果可能,使用指定的user和passwoed	 */     private Connection newConnection() {	  Connection con = null;	  try	  {	  	if (user == null)	  	{		  //得到一個新的數據庫連接		  con = DriverManager.getConnection(URL);	  	} else {		  //得到一個新的數據庫連接,使用用戶和koling、		  con = DriverManager.getConnection(URL,user,password);		}		log("Created a new connection in pool " + name);	  }	  catch (SQLException e)	  {		log(e,"Can't create a new connection for " + URL);		return null;	  }	  return con;	}  }}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美性色黄大片| 色欧美片视频在线观看| 欧美大白屁股肥臀xxxxxx| 依依成人精品视频| www国产亚洲精品久久麻豆| 欧美日韩亚洲综合在线| 在线观看www91| 欧美在线视频不卡| 久久精品视频网| 欧美一区二区三区电影| 欧美在线观看你懂的| 久久婷婷国产综合精品青草| 亚洲国产日韩在线一区模特 | 国产乱码精品一区二区三区av| 一区二区三区国产| 亚洲成a人片综合在线| 一二三四社区欧美黄| 国产成人精品影视| 成人免费高清视频| 丁香另类激情小说| 久久亚洲综合色| 青青草91视频| 精品制服美女丁香| 国产精品一区二区x88av| 91精品国产一区二区| 一级女性全黄久久生活片免费| 99综合影院在线| 色综合天天性综合| 91高清视频免费看| 日韩视频一区二区在线观看| 久久精品视频一区二区| 另类综合日韩欧美亚洲| 99久久精品国产一区| 欧美日韩另类一区| 久久久精品国产免费观看同学| 亚洲乱码中文字幕| 欧美午夜不卡在线观看免费| 国产精品嫩草久久久久| 亚洲免费伊人电影| 免费人成在线不卡| 精品福利在线导航| 亚洲最新在线观看| 欧美私模裸体表演在线观看| 一区二区三区四区亚洲| 日本精品裸体写真集在线观看| 一区二区欧美精品| 91精品国产麻豆国产自产在线 | 日韩电影一二三区| 国产成人午夜视频| 亚洲欧洲精品一区二区精品久久久| 亚洲综合色噜噜狠狠| 国产美女精品人人做人人爽| 91久久精品日日躁夜夜躁欧美| 一区二区三区精品| 337p亚洲精品色噜噜| 亚洲美女区一区| 欧美日韩aaa| 国产精品中文欧美| 日本一区二区免费在线观看视频| 亚洲成人av一区二区| 欧美一区二区三区性视频| 国产精品996| 亚洲国产视频在线| 26uuu色噜噜精品一区二区| 成人一区二区在线观看| 亚洲影视在线播放| 久久久久久免费| 色偷偷成人一区二区三区91| 日本欧美在线观看| 日本一区二区久久| 国产乱子伦视频一区二区三区| 中文字幕中文字幕一区| 不卡视频在线看| 国产精品色哟哟| 欧美日韩小视频| 夫妻av一区二区| 国产欧美日韩视频在线观看| 色天天综合久久久久综合片| 精品亚洲欧美一区| 亚洲精品乱码久久久久久 | 日本欧美大码aⅴ在线播放| 国产欧美精品国产国产专区 | av中文字幕一区| 日韩av电影一区| 亚洲精品亚洲人成人网在线播放| 日韩精品中文字幕一区 | 一区二区三区免费观看| 久久久99免费| 91精品国产色综合久久ai换脸| 成人午夜碰碰视频| 国产综合色在线视频区| 久久久久9999亚洲精品| 欧美精品亚洲二区| 久久国产日韩欧美精品| 夜夜爽夜夜爽精品视频| 中文字幕一区二区5566日韩| 精品国产一区二区三区忘忧草 | 亚洲成av人片| 伊人一区二区三区| 中文字幕在线不卡视频| 久久久久久久久久久久久久久99 | 国产亚洲欧洲一区高清在线观看| 在线观看91精品国产麻豆| 92国产精品观看| 顶级嫩模精品视频在线看| 精品一区二区三区蜜桃| 麻豆91在线观看| 国产午夜三级一区二区三| 日韩精品一区二区三区swag| 欧美酷刑日本凌虐凌虐| 欧美色网一区二区| 91国内精品野花午夜精品| 色嗨嗨av一区二区三区| 91色婷婷久久久久合中文| 亚洲午夜私人影院| 亚洲在线成人精品| 亚洲成人在线观看视频| 亚洲综合区在线| 亚洲成人在线观看视频| 亚洲福利电影网| 五月激情综合婷婷| 国产亚洲一本大道中文在线| 久久久久国产精品厨房| 国产午夜精品在线观看| 国产精品久久久久一区二区三区共| 日本一区二区三区dvd视频在线| 亚洲国产精华液网站w| 亚洲欧洲成人自拍| 亚洲日本va午夜在线电影| 日韩一区二区在线观看视频| 日韩三区在线观看| 久久日韩精品一区二区五区| 久久精品一区二区三区四区| 中文字幕一区在线观看视频| 亚洲天堂福利av| 亚洲大片精品永久免费| 毛片一区二区三区| 国产成人久久精品77777最新版本| 成人午夜av电影| 在线观看亚洲a| 日韩欧美在线一区二区三区| 国产亚洲短视频| 亚洲欧美日韩国产另类专区 | 欧美日韩精品久久久| 欧美一级欧美三级| 国产欧美日韩在线| 亚洲综合激情另类小说区| 午夜电影网一区| 国产99久久久国产精品潘金| 色一区在线观看| 日韩精品一区二区三区四区| 中文字幕一区二区三区四区不卡| 午夜视频在线观看一区| 国产精品一区二区你懂的| 91国偷自产一区二区三区成为亚洲经典 | 在线观看三级视频欧美| 精品国产一区二区三区忘忧草 | 色欧美片视频在线观看| 日韩欧美亚洲国产另类| 自拍偷拍欧美精品| 久久99精品国产| 色婷婷综合中文久久一本| 久久免费午夜影院| 偷窥国产亚洲免费视频| 99久久精品国产网站| 日韩女优视频免费观看| 亚洲激情第一区| 国产在线不卡一区| 欧美三级日韩三级| 中文字幕一区在线| 国产乱子轮精品视频| 欧美疯狂性受xxxxx喷水图片| 国产精品久久久久一区二区三区| 久久超碰97中文字幕| 欧美最猛黑人xxxxx猛交| 日韩精品一区二区三区在线播放| 一级女性全黄久久生活片免费| 福利视频网站一区二区三区| 欧美一区二区三区成人| 一区二区三区日韩| 不卡在线观看av| 国产日韩亚洲欧美综合| 美女视频免费一区| 91精品国产一区二区三区| 亚洲高清在线精品| 欧洲精品一区二区三区在线观看| 国产精品每日更新| 国产激情视频一区二区三区欧美 | 精品视频在线免费| 成人免费一区二区三区视频| 国产精品99久久不卡二区| 26uuu亚洲| 国产自产高清不卡| 久久综合九色综合久久久精品综合| 五月婷婷综合在线| 欧美人妖巨大在线| 亚洲高清免费观看高清完整版在线观看| 99国内精品久久| 亚洲激情欧美激情| 色94色欧美sute亚洲13|