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

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

?? dbconnectionmanager.java

?? java實現管理系統 可以對公司人員進行管理
?? JAVA
字號:
package cn.com.edu.gui.model;
/**
 * <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 = 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 數據庫連接
   */
  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.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 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.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 {
      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(poolName, pool);
    log("Invalid pool" + poolName);
    }
  }
  }

  /**
   * 裝載屬性并用其值初始化實例
   */
  private void init() {
//    InputStream is = getClass().getResourceAsStream("/db.properties");
    Properties dbProps = new Properties();
  try {
        FileInputStream is = new FileInputStream(new File("db.properties"));
    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(Properties props) {
    String driverClasses = props.getProperty("oracle.driver");
  StringTokenizer st = new StringTokenizer(driverClasses);

  while (st.hasMoreTokens()){
    String driverClassName = st.nextToken().trim();
    try
    {
      Driver driver = (Driver)Class.forName(driverClassName).newInstance();
    DriverManager.registerDriver(driver);
    drivers.addElement(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(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 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 對象中其他連接之后
      freeConnection.addElement(conn);
    checkedOut--;
    notifyAll();
  }

  /**
   * 從連接池得到一個連接, 如果當前沒有空閑的連接,
   * 如果連接數沒有達到最大,則創建一個新的連接
   */
  public synchronized Connection getConnection() {
    Connection con = null;
    if (freeConnection.size() >0) {
    //從Vector對象中得到第一個數據庫連接
      con = (Connection)freeConnection.firstElement();
    //將使用了的數據庫連接從數據庫連接池中刪除
        freeConnection.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 = freeConnection.elements();

    while (allConnections.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);
     }
    }
      freeConnection.removeAllElements();
  }

  /**
   *創建一個新的連接,如果可能,使用指定的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一区二区三区免费野_久草精品视频
精品综合久久久久久8888| 色一情一乱一乱一91av| 欧美日韩你懂得| 欧美精品一区二区高清在线观看| 国产精品美女视频| 极品销魂美女一区二区三区| 色婷婷激情一区二区三区| 精品国产三级a在线观看| 一区二区三区精品在线观看| 国产乱人伦偷精品视频不卡 | 久久精品国产99国产精品| 北条麻妃国产九九精品视频| 777亚洲妇女| 一区二区三区成人在线视频| 国产成人亚洲综合a∨婷婷图片 | 欧美一区二区三区免费在线看| 久久网站最新地址| 青娱乐精品视频在线| 在线视频亚洲一区| 亚洲免费三区一区二区| 粉嫩欧美一区二区三区高清影视| 亚洲精品一区二区在线观看| 蜜臀91精品一区二区三区| 欧美日韩综合在线免费观看| 一区二区三区视频在线观看| 97精品国产露脸对白| 国产亚洲精品aa| 国产精品影音先锋| 欧美精品一区二区久久久| 久久66热re国产| 日韩精品一区二区三区蜜臀 | 另类中文字幕网| 911国产精品| 免费在线观看成人| 欧美一卡二卡在线| 久久av老司机精品网站导航| 欧美一级片在线看| 精品夜夜嗨av一区二区三区| 精品国产乱码久久久久久久久| 久久国产精品露脸对白| 精品国产一区a| 韩国av一区二区| 国产欧美一区二区精品性色| 成人看片黄a免费看在线| 欧美韩国日本不卡| 91网站在线播放| 一个色在线综合| 日韩欧美第一区| 国产a级毛片一区| 亚洲三级电影网站| 欧美老肥妇做.爰bbww视频| 天天综合色天天综合| 日韩欧美电影一区| 成人黄色网址在线观看| 亚洲女女做受ⅹxx高潮| 欧美日韩国产天堂| 国产美女娇喘av呻吟久久| 国产精品丝袜一区| 欧美日韩成人综合| 国产福利一区二区三区| 亚洲女同一区二区| 91精品国产一区二区三区| 麻豆91在线观看| 国产精品女主播av| 欧美精选一区二区| 国产 欧美在线| 亚洲一区二区精品3399| 久久综合资源网| 一本色道久久综合亚洲91| 美女脱光内衣内裤视频久久影院| 中文乱码免费一区二区| 欧美日韩国产不卡| 99视频国产精品| 奇米精品一区二区三区在线观看 | 欧美精品一区二区精品网| 99久久99久久精品国产片果冻| 五月激情综合色| 国产欧美一区二区三区在线老狼| 欧美三级韩国三级日本三斤| 国产精品资源在线看| 亚洲成人av在线电影| 中文字幕第一页久久| 7777精品伊人久久久大香线蕉| 成人综合激情网| 三级亚洲高清视频| 亚洲黄色小说网站| 亚洲国产高清在线观看视频| 4438成人网| 在线观看免费视频综合| 成人深夜福利app| 九九九精品视频| 亚洲va欧美va人人爽| 国产精品美女久久久久av爽李琼| 日韩欧美www| 欧美三级视频在线| 91九色最新地址| 不卡av电影在线播放| 国产精品一二三| 狠狠色综合播放一区二区| 午夜欧美电影在线观看| 亚洲日本在线天堂| 亚洲视频免费在线观看| 国产午夜精品久久久久久免费视 | 亚洲成人资源在线| 亚洲另类一区二区| 亚洲欧美视频一区| 综合欧美一区二区三区| 一色桃子久久精品亚洲| 久久久国产精品午夜一区ai换脸| 欧美一区二区三区四区在线观看| 欧美日韩一级片在线观看| 日本丶国产丶欧美色综合| 91在线视频免费观看| 成人精品免费网站| 不卡视频免费播放| 99在线精品免费| 91亚洲精品乱码久久久久久蜜桃| av毛片久久久久**hd| 91丝袜呻吟高潮美腿白嫩在线观看| 国产福利一区二区三区| 成人晚上爱看视频| 91视频91自| 一本久道中文字幕精品亚洲嫩| 97精品超碰一区二区三区| 97久久精品人人澡人人爽| 91久久精品国产91性色tv| 欧美日韩五月天| 日韩欧美亚洲国产精品字幕久久久| 日韩精品中文字幕一区| 26uuu欧美| 国产精品毛片久久久久久久| ●精品国产综合乱码久久久久| 伊人开心综合网| 水蜜桃久久夜色精品一区的特点| 日韩av不卡一区二区| 久久99久久99| a级高清视频欧美日韩| 色成年激情久久综合| 91精品国产综合久久精品麻豆| 日韩女优电影在线观看| 中文字幕巨乱亚洲| 亚洲3atv精品一区二区三区| 美女一区二区视频| 99久久精品国产导航| 欧美日本精品一区二区三区| 精品国产乱码久久| 亚洲人成7777| 日本不卡免费在线视频| 大白屁股一区二区视频| 欧美日韩国产综合视频在线观看| 亚洲精品在线电影| 一区二区三区免费网站| 久久99精品网久久| 91成人免费电影| 久久这里都是精品| 亚洲午夜久久久久中文字幕久| 国产在线精品视频| 欧美视频一区在线观看| 国产欧美一区二区精品性色超碰| 亚洲国产精品久久人人爱蜜臀| 国产在线播放一区二区三区| 色香蕉成人二区免费| 精品国产乱码久久久久久久| 亚洲一区二区在线免费看| 国产精品91一区二区| 欧美另类videos死尸| 最新国产精品久久精品| 奇米综合一区二区三区精品视频| 99国产欧美另类久久久精品| 日韩欧美电影一区| 亚洲成人免费电影| 91亚洲大成网污www| 久久久精品日韩欧美| 五月天激情综合| 欧美亚男人的天堂| 中文字幕亚洲一区二区va在线| 久久99九九99精品| 在线综合亚洲欧美在线视频| 亚洲欧洲色图综合| 国产成人自拍网| 久久久三级国产网站| 日本不卡一区二区三区| 欧洲视频一区二区| 亚洲天天做日日做天天谢日日欢| 国产精品自产自拍| www国产精品av| 麻豆极品一区二区三区| 欧美久久久久久久久中文字幕| 亚洲欧洲精品成人久久奇米网| 国产精品77777| 久久久久久久久岛国免费| 男人的天堂久久精品| 欧美高清一级片在线| 亚洲在线观看免费视频| 色偷偷久久人人79超碰人人澡| 日本一区二区三区久久久久久久久不| 久久福利视频一区二区| 日韩一级免费观看| 蜜乳av一区二区三区| 精品日韩av一区二区|