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

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

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

    javaGrowing

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      92 隨筆 :: 33 文章 :: 49 評(píng)論 :: 0 Trackbacks
    JDBC高級(jí)應(yīng)用三

    再談JDBC連結(jié)

    為什么要反復(fù)談JDBC連結(jié),因?yàn)樗訨DBC的性能,最主要的就是JDBC連結(jié),而SQL語(yǔ)句的
    優(yōu)化,和JAVA編程無(wú)關(guān),你的一個(gè)查詢語(yǔ)句的效率,是你對(duì)于SQL語(yǔ)法的使用技巧,這一方
    面你就可請(qǐng)教DBA,而不是來(lái)看我這種程序設(shè)計(jì)者的文章.

    我們已經(jīng)知道,取得數(shù)據(jù)庫(kù)連結(jié),有幾種層次的實(shí)現(xiàn)方法,一是直接得到物理連結(jié),而是通
    過(guò)傳統(tǒng)的連結(jié)池(沒(méi)有多大區(qū)別),三是通過(guò)java的擴(kuò)展包javax.sql.DataSource得到連結(jié)
    句柄,對(duì)于上面兩種,沒(méi)有什么可以多說(shuō)的,對(duì)于DataSource,我們?cè)偕钊胍恍?
    一般來(lái)說(shuō),DataSource是容器本身作為一個(gè)JDNI查找的對(duì)象返回出來(lái)的,也就是說(shuō)要依賴
    容器進(jìn)行配置,而如果一個(gè)100%的應(yīng)用程序(Application),比如基于swing的App,我根本
    不需要運(yùn)行容器,那我如何取得DataSource對(duì)象?這時(shí)可能要你自己寫(xiě)基于DataSource的
    連結(jié)池了(是不是有些太深入了?要做就做高手,SUN能做我們就能做).
    如果自己要實(shí)現(xiàn)DataSource,要清楚幾個(gè)關(guān)系,即DataSource中返回的Connection是一個(gè)連
    結(jié)的句柄,它要和實(shí)際的物理連結(jié)關(guān)連,這些實(shí)際的物理連結(jié)就是PooledConnection,我們
    叫它池中的連結(jié),可以通過(guò)實(shí)現(xiàn)ConnectionPoolDataSource,從中得到PooledConnection,
    這部分本來(lái)是廠商實(shí)現(xiàn)的,但這部份實(shí)現(xiàn)和傳統(tǒng)的連結(jié)池沒(méi)有什么大的區(qū)別,主要是從
    ConnectionPoolDataSource中得到PooledConnection的物理連結(jié),但如何從PooledConnection
    中g(shù)etConnection(),返回給用戶.這部分實(shí)現(xiàn)就是DataSource實(shí)現(xiàn)的性能高低的關(guān)鍵,一般
    來(lái)說(shuō),我們可以先把一個(gè)物理連結(jié)PooledConnection和多個(gè)客戶連結(jié)相關(guān)連來(lái)增加性能,也
    就是一個(gè)PooledConnection本身再作為一個(gè)工場(chǎng)的種子,通過(guò)一個(gè)PooledConnection再返回
    多個(gè)Connection,說(shuō)白了就是多個(gè)Connection的請(qǐng)求通過(guò)一個(gè)PooledConnection傳遞給數(shù)據(jù)庫(kù).
    只要用戶調(diào)用Connection的close()方法,就打斷這個(gè)Connetion與PooledConnection的關(guān)聯(lián)而
    讓PooledConnection可以和新的Connection進(jìn)行關(guān)聯(lián).

    JDBC事務(wù)

    JDBC1開(kāi)始,就支持本地事務(wù),所謂要地事務(wù),就是在一個(gè)連結(jié)中的多個(gè)操作可以作為一個(gè)事務(wù)
    過(guò)程來(lái)提交.注意,只要你使用conn.setAutoCommit(false);方法就隱式地打開(kāi)了一個(gè)事務(wù).當(dāng)
    事務(wù)被commit或abort時(shí),隱含的是打開(kāi)了一個(gè)新的事務(wù).
    另外,當(dāng)一次事務(wù)被commit或abort,PreparedSattement和CallableStatement綁定的結(jié)果集全
    部被關(guān)閉,而普通的Statement綁一的結(jié)果集將被維持.
    在處理多個(gè)操作時(shí):
    conn.setAutoCommit(false);
    Statement st1 = conn.createSatatement(sql1);
    Statement st2 = conn.createSatatement(sql2);
    Statement st3 = conn.createSatatement(sql3);
    Statement st4 = conn.createSatatement(sql4);
    st1.executeXXXXX();
    st2.executeXXXXX();
    st3.executeXXXXX();
    st4.executeXXXXX();
    在這里,我們要么把四個(gè)操作一起回滾,或一起提交,但如果我們認(rèn)為,1-3的操作是要求一致完
    成,而4的操作在一至三完成時(shí)再完成.在經(jīng)前的版本中我們要把它們分開(kāi)在兩次事務(wù)中,但在
    JDBC3.0以后,我們可以利用conn.setSavepoint() 來(lái)得到一個(gè)SavePoint來(lái)對(duì)同一事務(wù)中不同階
    段進(jìn)行斷點(diǎn)保存.然后可以在任何斷點(diǎn)上進(jìn)行提交和回滾.同時(shí)我們還可以利用
    conn.setTransactionIsolation()來(lái)設(shè)置隔離級(jí)別.
    要注意的是,對(duì)事務(wù)的支持要看數(shù)據(jù)庫(kù)的具體實(shí)現(xiàn).如果數(shù)據(jù)庫(kù)本身不支持事務(wù),那么以上的操作
    都是無(wú)效的,可以從 DatabaseMetaData中查詢數(shù)據(jù)庫(kù)對(duì)事務(wù)的支持情況.

    畢竟,本地事務(wù)功能并不是很強(qiáng),而如果不是編程人員對(duì)SQL語(yǔ)句傳入錯(cuò)誤,那么在一次連結(jié)中
    多個(gè)操作只完成部份的機(jī)率并不容易發(fā)生(當(dāng)然有時(shí)還會(huì)發(fā)生的,要不本地事務(wù)就不會(huì)產(chǎn)生了).
    其實(shí),JDBC事務(wù)最重要的是分布式事務(wù),即同時(shí)操作不同的連結(jié),可能是同物理庫(kù)的不同空間,也
    可能是同一主機(jī)的不同數(shù)據(jù)庫(kù)或不同主機(jī)的多個(gè)數(shù)據(jù)庫(kù).這就很難保證每個(gè)操作都是成功的,發(fā)
    生操作不一致的機(jī)會(huì)太多了,可以說(shuō)如果不在事務(wù)中測(cè)試你就無(wú)法相信操作的一致性.所以分布
    式事務(wù)是JDBC的重要技術(shù).
    在下一節(jié)我們重點(diǎn)介紹JDBC分布式事務(wù).
    posted on 2006-01-09 15:01 javaGrowing 閱讀(307) 評(píng)論(0)  編輯  收藏 所屬分類: JDBC

    只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产电影在线观看| 亚洲欧美成人综合久久久| 久久久久免费看黄a级试看| 亚洲视频精品在线观看| 最近免费中文字幕大全| 亚洲一区二区三区免费| 亚洲欧洲日产国码在线观看| 色视频色露露永久免费观看 | 免费看美女被靠到爽| 国产亚洲人成在线影院| 亚洲国产精品无码专区| 免费a级毛片无码a∨蜜芽试看| 男人和女人高潮免费网站| 亚洲视频在线一区二区三区| 国产在线观看www鲁啊鲁免费| 久久午夜夜伦鲁鲁片无码免费| 亚洲国产成人手机在线观看| 久久99国产亚洲精品观看| 日韩成人免费视频播放| 久热免费在线视频| 日韩亚洲人成在线综合| 亚洲毛片无码专区亚洲乱| JLZZJLZZ亚洲乱熟无码| 手机在线免费视频| 亚洲视频在线观看免费| 一级特黄aaa大片免费看| 亚洲午夜一区二区三区| 亚洲AV无码乱码国产麻豆穿越| 国产一精品一aⅴ一免费| 两性刺激生活片免费视频| 国产又黄又爽胸又大免费视频| 亚洲欧美日韩自偷自拍| 91精品国产亚洲爽啪在线影院| mm1313亚洲精品国产| 成年女人看片免费视频播放器| 久久久久久影院久久久久免费精品国产小说 | 久久成人国产精品免费软件| 中文字幕在线免费视频| 国产亚洲精品第一综合| 亚洲国产精品成人综合色在线| 亚洲国产成人久久精品app|