亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

自己寫的一個未成熟的數據庫連接池(一)

2019-11-18 12:04:06
字體:
來源:轉載
供稿:網友

  源代碼:
  
  /*
  * @Title 連接池
  * @Author: zxg
  * @Version 1.0
  * @Memo:定義數據庫連接及其數據庫連接池等
  */
  package com.drsl.db;
  
  import java.io.*;
  import java.sql.*;
  import java.util.*;
  import java.util.Date;
  import java.lang.reflect.*;
  import com.MySQL.jdbc.Driver;
  
  import com.drsl.db.*;
  
  public class ConnectionManager {
    
    static PRivate ConnectionManager instance; // 唯一實例
    static private int clients;
    static private int maxonlinetime=30*60*1000;
    
    private Vector drivers = new Vector();
    private Hashtable pools = new Hashtable();
    private Timer checkConnTimer=new Timer();
    
    static private PrintWriter log;
    /**
    * 返回唯一實例.假如是第一次調用此方法,則創建實例
    *
    * @return ConnectionManager 唯一實例
    */
    static synchronized public ConnectionManager getInstance() {
      if (instance == null) {
        instance = new ConnectionManager();
      }
  //    clients++;
      return instance;
    }
    
    /**
    * 建構函數私有以防止其它對象創建本類實例
    */
    private ConnectionManager() {
      init();
    }
    
    /**
    * 讀取屬性完成初始化
    */
    private void init() {
      
      try {
        
        InputStream  is = getClass().getResourceAsStream("db.properties");
        
        Properties  dbProps = new Properties();
      
        dbProps.load(is);
      }
      catch (Exception e) {
        e.printStackTrace();
        System.err.println("不能讀取屬性文件= " +
        "請確保db.properties在CLASSPATH指定的路徑中");
        return;
      }
      String logFile = dbProps.getProperty("logfile", "log.txt");
      try {
        log = new PrintWriter(new FileWriter(logFile, true), true);
      }
      catch (IOException e) {
        System.err.println("無法打開日志文件: " + 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();
          if(driver!=null){
            DriverManager.registerDriver(driver);
            drivers.addElement(driver);
            log("Begin");
            log("成功注冊JDBC驅動程序" + driverClassName);
          }
          else{
            log("Begin");
            log("注冊JDBC驅動程序" + driverClassName+"失敗");
          }
            
        }
        catch (Exception e) {
          log("Begin");
          log("無法注冊JDBC驅動程序: " + driverClassName + ", 錯誤: " + e);
        }
      }
    }
    
    /**
    * 根據指定屬性創建連接池實例.
    *
    * @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("沒有為連接池" + poolName + "指定URL");
            continue;
          }
          
          String user = props.getProperty(poolName + ".user");
          String passWord = props.getProperty(poolName + ".password");
          
          String maxconn = props.getProperty(poolName + ".maxconn", "0");
          String minconn = props.getProperty(poolName + ".minconn", "10");
          String option=props.getProperty(poolName+".option","");
          int max,min;
          try {
            max = Integer.valueOf(maxconn).intValue();
            
          }
          catch (NumberFormatException e) {
            log("錯誤的最大連接數限制: " + maxconn + " .連接池: " + poolName);
            max = 0;
          }
          
          try {
            min = Integer.valueOf(minconn).intValue();
            
          }
          catch (NumberFormatException e) {
            log("錯誤的最小連接數限制: " + minconn + " .連接池: " + poolName);
            min = 0;
          }
          
          try{
            ConnectionPool pool = new ConnectionPool(poolName, url,user,password,min,max,option);
            
            pools.put(poolName, pool);
            
            //2秒鐘后開始每個一分鐘檢查一次連接池情況
            checkConnTimer.schedule(pool,2000,60*1000);
  
            log("成功創建連接池" + poolName);
            
          }catch(Exception e){
            log(e,"創建DBConnectionPool出錯");
          }
        }
      }
    }
  
    /**
    * 將連接對象返回給由名字指定的連接池
    *
    * @param name 在屬性文件中定義的連接池名字
    * @param con 連接對象
    */
    public void freeConnection(String name, Connection conn) {
      ConnectionPool pool = (ConnectionPool) pools.get(name);
      if (pool != null) {
        pool.freeConnection(conn);
      }
    }
    
    /**
    * 獲得一個可用的(空閑的)連接.假如沒有可用連接,且已有連接數小于最大連接數
    * 限制,則創建并返回新連接
    *
    * @param name 在屬性文件中定義的連接池名字
    * @return Connection 可用連接或null
    */
    public Connection getConnection(String name) {
      ConnectionPool pool = (ConnectionPool) 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) {
      ConnectionPool pool = (Con

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
9.1国产丝袜在线观看| 欧洲午夜精品久久久| 色无极影院亚洲| 久久久女女女女999久久| 尤物yw午夜国产精品视频| 2019亚洲男人天堂| 日韩极品精品视频免费观看| 国模视频一区二区| 欧美日韩综合视频| 亚洲香蕉成人av网站在线观看| 亚洲欧美精品伊人久久| 国产69精品久久久久9| 欧美诱惑福利视频| 日韩成人av在线播放| 丝袜美腿亚洲一区二区| 亚洲福利视频网站| 国产精品高潮呻吟久久av无限| 在线观看久久久久久| 日韩精品高清视频| 欧美日韩亚洲一区二区三区| 亚洲午夜精品久久久久久久久久久久| 亚洲成人a级网| 日韩美女av在线| 久久久天堂国产精品女人| 狠狠综合久久av一区二区小说| 欧美巨乳美女视频| 亲子乱一区二区三区电影| 亚洲精品久久久久久下一站| 97久久精品在线| 日本精品视频在线观看| 亚洲欧美激情在线视频| 日韩欧美精品免费在线| 欧美日韩激情视频8区| 91av在线网站| 在线看片第一页欧美| 亚洲专区中文字幕| 97超碰国产精品女人人人爽| 久久亚洲精品一区| 亚洲一级黄色av| 九九热视频这里只有精品| 精品久久久久久国产91| 欧美日韩国产成人在线观看| 亚洲日本成人女熟在线观看| 国产精品网红直播| 亚洲精品日韩av| 国产视频久久久久| 欧美精品videosex极品1| 国产免费一区二区三区在线观看| 中文字幕亚洲欧美日韩高清| 成人午夜激情免费视频| 欧美一区二区影院| 亚洲aaa激情| 国产视频精品一区二区三区| 91精品久久久久久久久久久久久| 欧美黄色免费网站| 一级做a爰片久久毛片美女图片| 91精品免费久久久久久久久| 九九九热精品免费视频观看网站| 亚洲片在线资源| 欧美成人精品一区二区三区| 欧美极品美女电影一区| 一本色道久久88综合日韩精品| 26uuu亚洲伊人春色| 欧美专区在线播放| 日韩久久免费电影| 久久精品亚洲精品| 欧美成人国产va精品日本一级| 热久久免费视频精品| 亚洲在线视频福利| 色黄久久久久久| 日韩精品中文字幕在线| 国产主播欧美精品| 欧美网站在线观看| 欧美大人香蕉在线| 欧美精品999| 久久九九精品99国产精品| 欧美黄色小视频| 欧美激情视频在线免费观看 欧美视频免费一| 欧美小视频在线观看| 亚洲香蕉成人av网站在线观看| 日韩天堂在线视频| 一区二区欧美亚洲| 亚洲石原莉奈一区二区在线观看| 九九热精品视频国产| 国产精品高潮在线| 欧美日韩视频在线| 亚洲精品一区二三区不卡| 国产成人精品在线播放| 欧美午夜视频一区二区| 亚洲精品wwwww| www亚洲精品| 久久久精品美女| 色偷偷av一区二区三区乱| 亚洲视频国产视频| 国产噜噜噜噜久久久久久久久| 色www亚洲国产张柏芝| 国内精品小视频| 国产一区二区三区免费视频| 成人免费视频xnxx.com| 久久精品国产v日韩v亚洲| 欧美乱人伦中文字幕在线| 日本一区二区在线播放| 欧美最顶级的aⅴ艳星| 亚洲国产精彩中文乱码av在线播放| 日韩电影在线观看中文字幕| 国内精久久久久久久久久人| 久操成人在线视频| 黑人巨大精品欧美一区免费视频| 亚洲精品乱码久久久久久按摩观| 午夜精品一区二区三区视频免费看| 日韩久久精品电影| 中国人与牲禽动交精品| 成人久久精品视频| 亚洲第一福利视频| 日韩欧美在线第一页| 日韩亚洲成人av在线| 国产精品偷伦免费视频观看的| 欧美噜噜久久久xxx| 久久成人精品一区二区三区| 色悠悠国产精品| 欧美性猛交xxx| 中文字幕av一区二区三区谷原希美| 亚洲少妇激情视频| 午夜免费在线观看精品视频| 欧美天天综合色影久久精品| 2019中文字幕在线免费观看| 国产三级精品网站| 亚洲自拍中文字幕| 日韩视频第一页| 亚洲成人激情在线| 92看片淫黄大片看国产片| 精品一区二区三区电影| 久久久久久久久亚洲| 美女999久久久精品视频| 国产精品美女主播| 国产精品高潮呻吟视频| 成人激情视频免费在线| 免费91在线视频| 91久久久国产精品| 日韩免费在线免费观看| 国产小视频国产精品| 久久久91精品国产一区不卡| 国产精品露脸自拍| 国产成人一区二| 91在线视频精品| 久久精品国产2020观看福利| 中文字幕在线视频日韩| 亚洲社区在线观看| 色综合久综合久久综合久鬼88| 亚洲激情国产精品| 91精品国产综合久久香蕉最新版| 97av在线播放| 亚洲成人xxx| 久久久久999| 欧美猛男性生活免费| 久久久精品视频在线观看| 奇门遁甲1982国语版免费观看高清| 欧美另类69精品久久久久9999| 中文日韩电影网站| 亚洲一区二区三区香蕉| 亚洲成年人在线| 亚洲欧美变态国产另类| 欧美一区二区三区免费观看| 日韩在线视频观看|