<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很容易使用的開源專業(yè)級(jí)jdbc數(shù)據(jù)庫(kù)緩沖池。
    它是sourceforge上的一個(gè)開源項(xiàng)目,
    項(xiàng)目在
    http://sourceforge.net/projects/c3p0
    他的眾多特性這里就不一一介紹了。
    比較爽的一點(diǎn)就是
    當(dāng)Connection歸還緩沖池時(shí),c3p0會(huì)很小心的關(guān)閉
    這條連接打開的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類的目錄下再創(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 金家寶 閱讀(4345) | 評(píng)論 (2)編輯 收藏

    JDBC也分2.0和3.0?

    如題。研究中...以前沒有注意過。

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

    鯉魚論壇 研究筆記(未)

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

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


    那就開始吧
    首先,和某些大蝦一樣的習(xí)慣,我們從WEB-INF下的web.xml開始,從以下代碼中可以發(fā)現(xiàn)隨著tomcat啟動(dòng)時(shí),自動(dòng)加載了InitServlet類。這是一個(gè)Servlet類。
    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類,代碼很簡(jiǎn)單:
    開始做了一個(gè)對(duì)此類日志(log4j)的綁定。接著通過SystemConfig取得了系統(tǒng)配置中的連接類型conntype(查看classes目錄下的SystemConfig.xml可知此變量是判斷使用連接池的類型0:3P0; 1:Proxool)。接著是初始化操作,記錄一些必要的啟動(dòng)信息(log4j)(其中做了本地地址和網(wǎng)絡(luò)訪問地址的轉(zhuǎn)換)。
    用DBUtil.close測(cè)試連接池是否加載成功。
    最后是釋放類所做的必要操作。判斷使用的是哪一種連接池,然后關(guān)閉。這樣我們的第一個(gè)類就分析完畢。
    接著需要了解到
    SystemConfig類是加載SystemConfig.xml配置文件,并設(shè)定方法去讀取。其中有一定的類型轉(zhuǎn)換。

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

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

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

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

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

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

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

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

    ?

    ?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

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

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


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

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

    主站蜘蛛池模板: 老司机精品免费视频| 亚洲videosbestsex日本| 亚洲heyzo专区无码综合| 国产va免费精品观看精品| 亚洲天天做日日做天天看| 国产免费一区二区三区在线观看| 色噜噜亚洲精品中文字幕| 四虎成人精品国产永久免费无码| 免费成人午夜视频| 九九九精品视频免费| 亚洲线精品一区二区三区影音先锋 | 青草久久精品亚洲综合专区| 成人免费无毒在线观看网站| 亚洲人成人无码.www石榴| 日韩中文无码有码免费视频 | 少妇性饥渴无码A区免费| 国产亚洲av片在线观看播放| 久久免费线看线看| 亚洲人成自拍网站在线观看| 亚洲AV无码一区东京热久久| 足恋玩丝袜脚视频免费网站| 亚洲 欧洲 视频 伦小说| 国产午夜鲁丝片AV无码免费| 九九99热免费最新版| 久久亚洲国产成人精品性色| 色婷婷7777免费视频在线观看| 亚洲欧洲日产国产最新| 女性自慰aⅴ片高清免费| 黄色a级片免费看| 亚洲va国产va天堂va久久| 日本免费人成视频播放 | 午夜视频在线观看免费完整版| 国产成年无码久久久免费| 精品国产日韩亚洲一区在线| 亚洲人精品亚洲人成在线| 亚洲AV无码一区二区乱子伦| 亚洲一区二区三区无码影院| 一个人免费日韩不卡视频| 亚洲中文字幕无码中文字| 亚洲男人av香蕉爽爽爽爽| 91成人在线免费观看|