<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    2008年10月21日 #

    java 數(shù)據(jù)庫(kù)緩沖池 使用c3p0

    c3p0很容易使用的開(kāi)源專(zhuān)業(yè)級(jí)jdbc數(shù)據(jù)庫(kù)緩沖池。
    它是sourceforge上的一個(gè)開(kāi)源項(xiàng)目,
    項(xiàng)目在
    http://sourceforge.net/projects/c3p0
    他的眾多特性這里就不一一介紹了。
    比較爽的一點(diǎn)就是
    當(dāng)Connection歸還緩沖池時(shí),c3p0會(huì)很小心的關(guān)閉
    這條連接打開(kāi)的Statement和ResultSet,免去了使用時(shí)
    自己動(dòng)手小心翼翼的關(guān)閉。

    c3p0使用非常簡(jiǎn)單,這里給一個(gè)例子

    package common.db;

    import java.sql.Connection;
    import java.sql.SQLException;
    import java.util.Properties;


    import com.mchange.v2.c3p0.ComboPooledDataSource;
    import com.mchange.v2.c3p0.DataSources;

    public final class ConnectionManager {
    ?private static ConnectionManager instance;
    ?
    ?public ComboPooledDataSource ds;
    ?private static String c3p0Properties="c3p0.properties";
    ?
    ?private ConnectionManager() throws Exception {
    ??Properties p = new Properties();
    ??p.load(this.getClass().getResourceAsStream(c3p0Properties));
    ??ds = new ComboPooledDataSource();
    ?}
    ?
    ?public static final ConnectionManager getInstance() {
    ??if (instance == null) {
    ???try {
    ????instance = new ConnectionManager();
    ???} catch (Exception e) {
    ????e.printStackTrace();
    ???}
    ??}
    ??return instance;
    ?}
    ?
    ?public synchronized final Connection getConnection() {
    ??try {
    ???return ds.getConnection();
    ??} catch (SQLException e) {
    ???e.printStackTrace();
    ??}
    ??return null;
    ?}

    ?protected void finalize() throws Throwable {
    ??DataSources.destroy(ds);?//關(guān)閉datasource
    ??super.finalize();
    ?}
    ?
    }

    然后在ConnectionManager類(lèi)的目錄下再創(chuàng)建一個(gè)配置文件c3p0.properties
    內(nèi)容如下:
    #db login parameters
    driverClass=com.mysql.jdbc.Driver
    jdbcUrl=jdbc:mysql://localhost/test?useUnicode=no&characterEncoding=GBK
    user=test
    password=test

    #pool parameters
    initialPoolSize=2
    maxPoolSize=5
    #maxIdleTime=10
    #idleConnectionTestPeriod=5
    autoCommitOnClose=true

    完整的配置文件參數(shù)參看c3p0的文檔

    使用connection時(shí)很簡(jiǎn)單
    Connection conn = ConnectionManager.getInstance().getConnection();
    ...
    最后 conn.close() 即可,

    posted @ 2008-10-23 10:24 金家寶 閱讀(4357) | 評(píng)論 (2)編輯 收藏

    JDBC也分2.0和3.0?

    如題。研究中...以前沒(méi)有注意過(guò)。

    posted @ 2008-10-23 10:10 金家寶 閱讀(301) | 評(píng)論 (0)編輯 收藏

    鯉魚(yú)論壇 研究筆記(未)

    2008.10.21第一天
    網(wǎng)站地址: http://www.liyunet.com/
    源碼下載: http://www.liyunet.com/bbs/download.jsp

    我主要是利用該論壇的簡(jiǎn)易性來(lái)研究JSP技術(shù),以及緩存技術(shù)。雖然說(shuō)目前大部分論壇應(yīng)用的都是主流框架技術(shù),但說(shuō)回來(lái),這些框架也只是對(duì)JSP等相關(guān)技術(shù)的一個(gè)封裝,而了解底部應(yīng)用及其原理更容易讓我理解主流框架的內(nèi)部原理機(jī)制。不至于讓框架把我們變成“傻子”。


    那就開(kāi)始吧
    首先,和某些大蝦一樣的習(xí)慣,我們從WEB-INF下的web.xml開(kāi)始,從以下代碼中可以發(fā)現(xiàn)隨著tomcat啟動(dòng)時(shí),自動(dòng)加載了InitServlet類(lèi)。這是一個(gè)Servlet類(lèi)。
    WEB-INF\web.xml部分代碼:
    1
    2<servlet-name>InitServlet</servlet-name>
    3????????<servlet-class>com.bcxy.servlet.InitServlet</servlet-class>
    4????????<load-on-startup>1</load-on-startup>
    5??????</servlet>
    6

    查看com.bcxy.servlet.InitServlet類(lèi),代碼很簡(jiǎn)單:
    開(kāi)始做了一個(gè)對(duì)此類(lèi)日志(log4j)的綁定。接著通過(guò)SystemConfig取得了系統(tǒng)配置中的連接類(lèi)型conntype(查看classes目錄下的SystemConfig.xml可知此變量是判斷使用連接池的類(lèi)型0:3P0; 1:Proxool)。接著是初始化操作,記錄一些必要的啟動(dòng)信息(log4j)(其中做了本地地址和網(wǎng)絡(luò)訪問(wèn)地址的轉(zhuǎn)換)。
    用DBUtil.close測(cè)試連接池是否加載成功。
    最后是釋放類(lèi)所做的必要操作。判斷使用的是哪一種連接池,然后關(guān)閉。這樣我們的第一個(gè)類(lèi)就分析完畢。
    接著需要了解到
    SystemConfig類(lèi)是加載SystemConfig.xml配置文件,并設(shè)定方法去讀取。其中有一定的類(lèi)型轉(zhuǎn)換。

    此時(shí)似乎已經(jīng)找不到頭緒了。那這樣吧。我們就開(kāi)始訪問(wèn)我們自己搭建的論壇,從首頁(yè)開(kāi)始,也就是index.jsp頁(yè)面。
    瀏覽index.jsp代碼,由上向下理解每一個(gè)語(yǔ)句的含義(整體分體)。

    設(shè)定頁(yè)面編碼;導(dǎo)入IPLocalizer類(lèi)(應(yīng)該是做IP顯示的工具類(lèi));插入INC/const.jsp頁(yè)(過(guò)后會(huì)有分析);設(shè)定stats變量數(shù)值(通過(guò)閱讀其他jsp頁(yè)面發(fā)現(xiàn),此變量的作用主要是在于在首頁(yè)顯示用戶(hù)狀態(tài)時(shí),兼并顯示當(dāng)前用戶(hù)做瀏覽的頁(yè)面:也就是stats的值,這樣我們可以在客戶(hù)可訪問(wèn)的范圍內(nèi)對(duì)stats變量進(jìn)行設(shè)置,就可以查看在線用戶(hù)的當(dāng)前行為);繼續(xù)插入INC/theme.jsp(估計(jì)是定制論壇模板的文件);<table>標(biāo)簽內(nèi)部就是連接到相關(guān)顯示數(shù)據(jù)信息的jsp頁(yè)面并附加了參數(shù)。其中的一些格式是通過(guò)上面引用文件中的變量設(shè)置,相對(duì)不難理解;論壇消息廣播部分,通過(guò)一個(gè)可執(zhí)行jsp頁(yè)面vector顯示在首頁(yè)頂部,當(dāng)中訪問(wèn)數(shù)據(jù)庫(kù)的細(xì)節(jié)需要進(jìn)一步研究代碼);接著是帖子的遍歷,也就是首頁(yè)最關(guān)鍵的部分,這里看起來(lái)不是由jsp頁(yè)面來(lái)負(fù)責(zé)獲取數(shù)據(jù),而是通過(guò)Forum類(lèi)來(lái)獲取一些過(guò)濾之后的數(shù)據(jù):這里所說(shuō)的過(guò)濾是例如置頂帖子,最新帖子等有一些特殊標(biāo)記的數(shù)據(jù):;
    index.jsp的其他部分就都是大同小異了。都是通過(guò)一個(gè)遍歷來(lái)展現(xiàn)具有相同特性的數(shù)據(jù)。;大家需要注意一些關(guān)于頁(yè)面表現(xiàn)的而非java技術(shù)的部分,例如信息層的提示,和一些圖片連接。
    通過(guò)index.jsp的學(xué)習(xí),我們大概已經(jīng)了解了大部分jsp頁(yè)面代碼的表現(xiàn)形式和含義。當(dāng)然,一定要注意在這個(gè)過(guò)程中,參數(shù)傳遞、參數(shù)獲取的代碼部分,不要遺漏。除了一些我們可以看到的頁(yè)面之外,上面部分也講到了一些并不用于顯示給用戶(hù)的頁(yè)面,這里我們認(rèn)為它是可執(zhí)行頁(yè)面,也就是說(shuō)它對(duì)我們的數(shù)據(jù)和請(qǐng)求做了一些處理,或者說(shuō)把我們的請(qǐng)求轉(zhuǎn)交給了服務(wù)器(比如servlet)。

    預(yù)計(jì)晚上要研究一下有關(guān)數(shù)據(jù)庫(kù)方面的存取類(lèi)JdbcWrapper以及連接獲取和釋放、數(shù)據(jù)查詢(xún)插入。
    2008.10.22
    大概昨天寫(xiě)的已經(jīng)忘的差不多了,那么我們還是從index.jsp文件開(kāi)始,前幾行沒(méi)有什么問(wèn)題,都是一些導(dǎo)入文件的標(biāo)簽,那么我們從SkinUtil.這個(gè)類(lèi)入手。在查看SkinUtil類(lèi)代碼的時(shí)候我們發(fā)現(xiàn)里面應(yīng)用了一些com\bcxy\bbs\util?包中類(lèi),其中含有三個(gè)工具類(lèi)。(偷笑,看了文件大小,應(yīng)該代碼不多,我們看看里面都是什么)在開(kāi)始之前我們應(yīng)了解一下GCookie.java類(lèi)的大概內(nèi)容和作用??磳?dǎo)入包我們可以大概了解一下此類(lèi)的作用:對(duì)URL的編碼與解碼,產(chǎn)生和讀取Cookie,還有就是做一些日志記錄(log4j)。
    我們仔細(xì)閱讀后,了解到,其中有一個(gè)重載方法,也就是setCookie方法,根據(jù)不同的參數(shù),可以讓我們選擇直接賦予變量名和值的方法,或者是賦予變量名和值另外加上最大保存時(shí)間的方法。? 類(lèi)中的另一個(gè)方法是獲取Cookie方法值。
    ParamUtil類(lèi)也很簡(jiǎn)單,是取得字符串和 取得整數(shù)的重載方法,其中的參數(shù)決定是否有默認(rèn)值,是否需要轉(zhuǎn)碼。
    SysUtil類(lèi)中根據(jù)SystemConfig類(lèi)中的讀取方法讀取配置文件systemconfig.properties,按照里面的設(shè)置,來(lái)判斷是否對(duì)參數(shù)和數(shù)據(jù)庫(kù)讀取操作中的參數(shù)進(jìn)行編碼。其中還有一個(gè)方法是取得真實(shí)地址,當(dāng)然這些都是根據(jù)systemconfig.properties文件中配置而定的。
    BBSCconst.java類(lèi)簡(jiǎn)單的設(shè)置了一些常量。作用是設(shè)置數(shù)據(jù)庫(kù)表名的時(shí)候加上systemconfig.properties中設(shè)置的前綴。
    回到SkinUtil.java類(lèi)似乎看起來(lái)一些剛剛還陌生的類(lèi)方法,顯得明朗。前面設(shè)置了一個(gè)Cookie的變量名并賦了值。

    ret?=?new?JdbcWrapper().doIntSearch(sql,?0);

    這里用到了新類(lèi),也就是我們昨天說(shuō)過(guò)的要了解的關(guān)于數(shù)據(jù)庫(kù)連接的類(lèi)。也是今天要解決的重點(diǎn)。打開(kāi)JdbcWrapper類(lèi),查看代碼.(插一句,看代碼的時(shí)候,我覺(jué)得先看包名,了解大概要用到的類(lèi)和方法,去設(shè)想這個(gè)類(lèi)要實(shí)現(xiàn)的功能),yi一眼看來(lái),大概都熟悉,無(wú)非是連接數(shù)據(jù)庫(kù) 讀取,結(jié)果保存,異常,還有一些類(lèi)似數(shù)組的HashMap還有遍歷用得Iterator。想想,大概就是數(shù)據(jù)層的一些基礎(chǔ)CRUD操作。但是其中有個(gè)類(lèi)不是很熟悉,DatabaseMetaData類(lèi),查看sun公司的在線文檔,發(fā)現(xiàn)這是個(gè)接口而且方法奇多,文檔的第一句這么寫(xiě),

    Comprehensive?information?about?the?database?as?a?whole.?

    我也不能理解這句話包含了什么內(nèi)容。不管他,在程序中慢慢體會(huì)吧。JdbcWrapper這個(gè)類(lèi)有點(diǎn)長(zhǎng),不過(guò),大部分方法都有類(lèi)似的作用,也就是說(shuō)真正不同功能的代碼也只有幾分之一而已。我看的都想睡覺(jué)了。

    在網(wǎng)吧,因?yàn)椴槐?,先離開(kāi)咯
    今天還好,自己有一臺(tái)電腦,可以不限制時(shí)間。繼續(xù)工作....
    之前研究JdbcWrapper類(lèi)的時(shí)候有一個(gè)小小的疑問(wèn)。如下

    ?

    ?1?????//######這里有一點(diǎn)不明白,為什么要判斷getAutoClose()
    ?2????/*
    ?3?????*?當(dāng)需要事務(wù)支持時(shí),需要設(shè)置autoClose=false,那就等到事務(wù)提交時(shí)再關(guān)閉數(shù)據(jù)庫(kù)連接。
    ?4?????*?*/

    ?5????public?void?closeConnection()?{
    ?6????????if?(getAutoClose())?{
    ?7????????????DBUtil.close(pstmt,?con);
    ?8????????}

    ?9????}

    10

    今天看群里鯉魚(yú)回答內(nèi)容如下:

    當(dāng)需要事務(wù)支持時(shí),需要設(shè)置autoClose=false,那就等到事務(wù)提交時(shí)再關(guān)閉數(shù)據(jù)庫(kù)連接。


    一時(shí)還沒(méi)有理解開(kāi)來(lái)。
    看過(guò)來(lái)看過(guò)去,JdbcWrapper類(lèi)對(duì)我來(lái)講還是有一部分難以理解。索性不去管它,等在下面的代碼中出現(xiàn)時(shí),反復(fù)查閱應(yīng)該會(huì)有更多的收獲。

    posted @ 2008-10-21 11:47 金家寶 閱讀(369) | 評(píng)論 (0)編輯 收藏

    主站蜘蛛池模板: 亚洲大片免费观看| 亚洲&#228;v永久无码精品天堂久久 | 中文字幕亚洲乱码熟女一区二区| 国产精品亚洲一区二区三区久久 | 亚洲av最新在线观看网址| 一二三四免费观看在线电影| 亚洲人成7777| 午夜免费福利在线观看| 一区二区三区免费看| 国产91久久久久久久免费| 一区二区三区AV高清免费波多| 亚洲美日韩Av中文字幕无码久久久妻妇| 一区二区免费在线观看| 黑人精品videos亚洲人| 99免费观看视频| 在线免费观看a级片| 亚洲变态另类一区二区三区| 免费A级毛片在线播放不收费| av网站免费线看| 91亚洲国产成人久久精品网站| 亚洲性线免费观看视频成熟 | 亚洲精品私拍国产福利在线| 国产高清免费视频| 久久久久亚洲AV无码去区首| 久久综合九色综合97免费下载| 亚洲阿v天堂在线| 久久久久久久免费视频| 春暖花开亚洲性无区一区二区| 国产亚洲一区二区三区在线不卡 | 麻豆精品成人免费国产片| 亚洲午夜精品在线| 国产在线观看免费完整版中文版 | 国产精品亚洲四区在线观看| 免费大学生国产在线观看p| 大妹子影视剧在线观看全集免费| 337p日本欧洲亚洲大胆精品555588| 国产福利在线观看免费第一福利| 国产精品亚洲专区在线播放| 亚洲蜜芽在线精品一区| 免费成人黄色大片| 每天更新的免费av片在线观看|