• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Khan's Notebook GCC/GNU/Linux Delphi/Window Java/Anywhere

            路漫漫,長修遠,我們不能沒有錢
            隨筆 - 173, 文章 - 0, 評論 - 257, 引用 - 0
            數(shù)據(jù)加載中……

            Java 的簡單數(shù)據(jù)庫連接池實現(xiàn)

            一個連接容器,記錄連接和連接使用狀況
            package db.khan;

            import java.sql.*;

            /*數(shù)據(jù)庫連接容器
             * 
            */

            public class DBPoolCon {
              
            /*容器中的連接*/
              
            public Connection con = null;

              
            public int nUsedTimes = 0;

              DBPoolCon() 
            {
              }


              
            public Connection get() {
                
            return con;
              }

            }


            一個操作和管理連接容器的連接池
            package db.khan;

            import java.sql.*;
            import java.util.*;

            /**連接池類
             * 
            */

            public class DBConPool {
              
            protected LinkedList listCon = new LinkedList();// 一個存放鏈接池的鏈表
              protected String DBUrl = null;
              
            protected String DBUser = null;
              
            protected String DBPasswd = null;
              
              
            /**最大連接數(shù)*/
              
            protected int nMaxCon = 0;
              
              
            /**連接最大使用時間*/
              
            protected int nMaxUsedTime = 0;
              
              
            /**當前已用連接數(shù)*/
              
            protected int nConNum = 0;

              
            /**構(gòu)造器
               * 
            @param String DBUrl
               * 
            @param String DBUser
               * 
            @param String DBPasswd
               * 
            @param int nMaxCon
               * 
            @param int nMaxUsedTime*/

              DBConPool(String DBUrl, String DBUser, String DBPasswd, 
            int nMaxCon, int nMaxUsedTime) {
                
            this.DBUrl = DBUrl;
                
            this.DBUser = DBUser;
                
            this.DBPasswd = DBPasswd;

                
            this.nMaxCon = nMaxCon;
                
            this.nMaxUsedTime = nMaxUsedTime;
              }


              
            /**從連接池中取得連接(線程安全函數(shù))
               * 
            @return DBPoolCon 返回的數(shù)據(jù)庫連接容器
               * 
            */

              
            synchronized public DBPoolCon get() {
                
            if (listCon.size() > 0{//有連接時,直接取得連接
                  return (DBPoolCon) listCon.removeFirst();
                }

                
            if (nConNum < nMaxCon) {//如果沒有多余連接,但連接池未滿,新建一個連接
                  return createCon();
                }

                
                System.out.println(
            "Fail to get DB con, too many con: " + nConNum + " max:" + nMaxCon);
                
            return null;
              }


              
            /**銷毀連接
               * 
            @param  DBPoolCon pCon*/

              
            synchronized public void release(DBPoolCon pCon) {
                pCon.nUsedTimes
            ++;
                
            if (pCon.nUsedTimes > nMaxUsedTime) {//如果使用時間大于最大使用時間,則該連接被回收
                  try {
                    nConNum
            --;
                    pCon.con.close();
                    System.out.println(
            "DB Con closed for used out");
                  }
             catch (Exception e) {
                    System.err.println(
            "Fail to close DB Con");
                  }

                }
             else {  //否則,該連接被重新分配
                  listCon.add(pCon);
                }

              }


              
            /**建立連接容器
               * 
            @return DBPoolCon 返回一個連接容器*/

              
            protected DBPoolCon createCon() {
                DBPoolCon pCon 
            = new DBPoolCon();
                
            try {
                  pCon.con 
            = DriverManager.getConnection(DBUrl, DBUser, DBPasswd);
                  pCon.con.setAutoCommit(
            true);
                  nConNum
            ++;
                  System.out.println(
            "DB Con created, con num:" + nConNum + " max:" + nMaxCon);
                }
             catch (Exception e) {
                  System.err.println(
            "Fail to create DB Con");
                }

                
            return pCon;
              }


              
            /**回收器
               * 將連接池中的所有連接關(guān)閉
            */

              
            protected void finalize() {
                
            try {
                  
            while (listCon.size() > 0{
                    DBPoolCon pCon 
            = (DBPoolCon) listCon.removeFirst();
                    pCon.con.close();
                  }

                }
             catch (Exception e) {
                  System.err.println(
            "Fail to close DB Con");
                }

              }

            }

            posted on 2006-03-05 17:36 Khan 閱讀(1743) 評論(0)  編輯 收藏 引用 所屬分類: 跨平臺開發(fā)Java

            大香伊人久久精品一区二区 | 久久中文骚妇内射| 国产人久久人人人人爽| 亚洲午夜久久久久久久久电影网 | 国产成人久久777777| 久久精品成人一区二区三区| 久久精品国产亚洲αv忘忧草| 97久久天天综合色天天综合色hd | 亚洲午夜久久久久久噜噜噜| 久久午夜电影网| 2020久久精品亚洲热综合一本| 香蕉久久夜色精品升级完成| 亚洲狠狠综合久久| 中文国产成人精品久久不卡| 99久久精品免费观看国产| 亚洲va久久久噜噜噜久久男同| 久久se精品一区二区影院| 久久精品国产亚洲av麻豆蜜芽 | 一本色道久久88综合日韩精品| 青青草原精品99久久精品66| 无码乱码观看精品久久| 精品久久久久久国产潘金莲| 久久久久久综合网天天| 久久久久国产视频电影| 狠狠狠色丁香婷婷综合久久俺| 久久婷婷午色综合夜啪| 久久夜色撩人精品国产小说| 中文字幕久久欲求不满| 久久精品国产亚洲麻豆| 久久精品人成免费| 人妻无码精品久久亚瑟影视| 久久成人小视频| 深夜久久AAAAA级毛片免费看| 97精品伊人久久久大香线蕉 | 久久久久久久久66精品片| 国产精品久久免费| 69国产成人综合久久精品| 久久精品人人做人人爽97 | 久久久久久久久久久| 久久亚洲AV无码精品色午夜| 亚洲一级Av无码毛片久久精品|