亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        Java數(shù)據(jù)庫連接池運行原理分析

        2009-12-31 00:00:00
        科技與生活 2009年23期

        摘要數(shù)據(jù)庫處理是應用系統(tǒng)業(yè)務處理中最耗時的步驟。在應用服務器系統(tǒng)中,一般都采用數(shù)據(jù)庫連接池(Connection Pool)的技術來解決。本文論述了連接池的工作原理及程序實現(xiàn),分析并給出了一個基本實現(xiàn),以更好地理解這種模型。

        關鍵詞JDBC;數(shù)據(jù)庫連接池;緩沖池

        中圖分類號 TP3文獻標識碼A 文章編號1673-9671-(2009)121-0016-02

        1引言

        在使用JDBC技術開發(fā)Java和數(shù)據(jù)庫有關應用的時候,隨著使用人數(shù)的增加系統(tǒng)的性能下降非常明顯,深入研究發(fā)現(xiàn)系統(tǒng)性能下降和Connection這個對象的創(chuàng)建有關系。問題的根源就在于對數(shù)據(jù)庫連接資源的低效管理上。對于共享資源,有一個很聞名的設計模式:資源池。該模式正是為了解決資源的頻繁分配、釋放所造成的問題。為解決這一問題,在應用服務器系統(tǒng)中,比如:Tomcat、Weblogic等,一般都采用數(shù)據(jù)庫連接池(Connection Pool)的技術。本文對此項技術進行了深入分析。

        2數(shù)據(jù)庫連接池技術

        2.1概述

        數(shù)據(jù)庫連接池的基本思想就是為數(shù)據(jù)庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數(shù)量的連接,當需要建立數(shù)據(jù)庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。即在系統(tǒng)初起,或者初次使用時,完成數(shù)據(jù)庫的連接,此后不再釋放此連接,而是在處理后面的請求時反復使用這些已經(jīng)建立的連接。這種方式可以大大減少數(shù)據(jù)庫的處理時間,有利于提高系統(tǒng)的整體性能,因此被廣泛地應用在各種應用服務器產品中。

        2.2運行原理

        其工作原理如圖所示:

        1)建立數(shù)據(jù)庫連接池對象—ConnectionPool,先設定Connection的數(shù)量;

        2)對于數(shù)據(jù)庫的訪問請求,直接從連接池中取得一個連接。如果數(shù)據(jù)庫連接池對象中沒有空閑的連接,則等待;

        3)進行數(shù)據(jù)存取操作,操作完畢釋放連接,回收到連接池;

        4)關閉數(shù)據(jù)庫,釋放所有數(shù)據(jù)庫連接;

        5)系統(tǒng)退出時,釋放數(shù)據(jù)庫連接池對象。

        2.3程序的實現(xiàn)

        實現(xiàn)程序基于MS SQL Server 2005,在MyEclipse環(huán)境下實現(xiàn)。

        首先,把直連jar添加到項目中;

        其次,在應用中要有一個屬性文件:db.properties用來配置連接池連接數(shù)據(jù)庫的信息,包含以下內容;

        driver=com.microsoft.sqlserver.jdbc.SQLServerDriver

        url=jdbc:sqlserver://localhost:1433;databaseName=zf

        user=sa

        password=123456

        poolSize=10

        通過分析,連接池類(ConnectionPool.java)是管理某一數(shù)據(jù)庫所有連接的“緩沖池”,可使用Vector對象來實現(xiàn)。主要實現(xiàn)以下功能:(1)根據(jù)屬性文件創(chuàng)建連接池對象;(2)增加連接對象到連接池中;(3)從連接池中申請連接對象;(4)回收客戶釋放的連接對象;(5)在系統(tǒng)退出前,關閉所有連接對象并釋放連接池占用的系統(tǒng)資源。

        由于系統(tǒng)中只能有一個連接池并且某個連接對象(Connection)在某個時刻是獨占的,因此連接池的實現(xiàn)符合單態(tài)設計模式。具體程序代碼如下:

        public class ConnectionPool {

        private Vector pool;//數(shù)據(jù)庫連接池

        private String driver; //驅動

        private String url; //連接路徑

        private String userName;//用戶名

        private String password;//密碼

        private int poolSize = 1;//連接池中的最大連接對象數(shù)

        private static ConnectionPool instance = 1;

        //構造方法

        private ConnectionPool( ){

        init( );

        }

        //使用單態(tài)設計模式獲得連接池實例

        public static ConnectionPool getInstance( ){

        if(instance==1){

        return new ConnectionPool( );

        }

        return instance;

        }

        //初始化連接池

        private void init( ) {

        pool = new Vector(poolSize);

        readConfig( );

        addConnection( );

        }

        //在連接池中創(chuàng)建所有連接對象

        private void addConnection() {

        Connection conn = 1;

        for(int i=0; i

        try{

        Class.forName(driver);//加載JDBC驅動程序

        conn = DriverManager.getConnection(url, userName, password); //建立連接

        pool.add(conn);

        }catch(ClassNotFoundException e){

        e.printStackTrace( );

        } catch (SQLException e) {

        e.printStackTrace( );

        }

        }

        }

        //讀取屬性文件中的數(shù)據(jù)庫連接信息

        private void readConfig( ) {

        try{

        String path = System.getProperty(\"user.dir\") +

        \"\\\\db.properties\";

        FileInputStream is = new

        FileInputStream(path);

        Properties pf = new Properties( );

        pf.load(is);

        this.driver = pf.getProperty(\"driver\");

        this.url = pf.getProperty(\"url\");

        this.userName = pf.getProperty(\"user\");

        this.password = pf.getProperty(\"password\");

        this.poolSize =

        Integer.parseInt(pf.getProperty(\"poolSize\"));

        }catch(Exception e){

        e.printStackTrace();

        }

        }

        //交給用戶使用的釋放連接

        public synchronized void release(Connection conn){

        pool.add(conn);

        }

        //用戶從連接池中申請連接

        public synchronized Connection getConnection( ){

        if(pool.size( )>0){

        Connection conn = (Connection)pool.get(0);

        pool.remove(conn);

        return conn;

        }else{

        return 1;

        }

        }

        //關閉所有連接

        public synchronized void closePool( ){

        for(int i=0; i

        try {

        ((Connection)pool.get(i)).close( );

        } catch (SQLException e) {

        e.printStackTrace( );

        }

        pool.remove(i);

        }

        }

        }

        3 結束語

        在使用JDBC進行與數(shù)據(jù)庫有關的應用開發(fā)中,采用連接池技術的系統(tǒng)在效率和穩(wěn)定性上比單純地使用JDBC技術的系統(tǒng)要好很多。目前的應用服務器系統(tǒng)在連接池方面的功能上已經(jīng)很完備,直接使用更加方便,剖析它并給出了一個基本實現(xiàn)是為了更好地理解這種模型,在此基礎上進行很多有意義的擴展。

        參考文獻

        [1]馬亨冰,葉東毅.軟件平臺與中間件技術,2004

        [2]鄧萬宇.基于JDBC的數(shù)據(jù)庫連接池高效管理策略[J].現(xiàn)代電子技術,2006

        看日本全黄色免费a级| 中文字幕有码在线视频| 午夜少妇高潮免费视频| 亚洲天堂av在线网站| 国产精品亚洲а∨无码播放不卡 | 少妇无码av无码专线区大牛影院| 久久精品黄aa片一区二区三区| 午夜片无码区在线| 亚洲区精品久久一区二区三区女同 | 国产亚洲一区二区在线观看| 欧美精品v国产精品v日韩精品| 亚洲欧美日韩综合在线观看| 黄页国产精品一区二区免费| 国产高颜值女主播在线| 白天躁晚上躁麻豆视频| 国产免费久久精品99re丫y| 偷拍熟女露出喷水在线91| 国产大屁股视频免费区| 国产精品免费久久久久软件| 久久久久亚洲AV片无码乐播| 色视频不卡一区二区三区 | 日韩制服国产精品一区| 亚洲视频高清| 日韩在线视频专区九区| 国产美女爽到喷出水来视频| 国产精品无码日韩欧| 久久久婷婷综合五月天| 在线观看 国产一区二区三区| 中文乱码字慕人妻熟女人妻| 国产精品无码无片在线观看3D | 久久久久综合一本久道| 激情五月天在线观看视频| 国产精品亚洲а∨无码播放不卡| 国产成人久久精品二区三区牛| 精品在线视频免费在线观看视频 | 俺来也俺去啦久久综合网| 熟女少妇av免费观看| 亚洲综合一区二区三区天美传媒| 久久久日韩精品一区二区三区| 精品一区二区三区四区少妇| 日本中文字幕有码在线播放|