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

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

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

    javaGrowing

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      92 隨筆 :: 33 文章 :: 49 評論 :: 0 Trackbacks
    JDBC高級應用三

    再談JDBC連結

    為什么要反復談JDBC連結,因為所以JDBC的性能,最主要的就是JDBC連結,而SQL語句的
    優化,和JAVA編程無關,你的一個查詢語句的效率,是你對于SQL語法的使用技巧,這一方
    面你就可請教DBA,而不是來看我這種程序設計者的文章.

    我們已經知道,取得數據庫連結,有幾種層次的實現方法,一是直接得到物理連結,而是通
    過傳統的連結池(沒有多大區別),三是通過java的擴展包javax.sql.DataSource得到連結
    句柄,對于上面兩種,沒有什么可以多說的,對于DataSource,我們再深入一些.
    一般來說,DataSource是容器本身作為一個JDNI查找的對象返回出來的,也就是說要依賴
    容器進行配置,而如果一個100%的應用程序(Application),比如基于swing的App,我根本
    不需要運行容器,那我如何取得DataSource對象?這時可能要你自己寫基于DataSource的
    連結池了(是不是有些太深入了?要做就做高手,SUN能做我們就能做).
    如果自己要實現DataSource,要清楚幾個關系,即DataSource中返回的Connection是一個連
    結的句柄,它要和實際的物理連結關連,這些實際的物理連結就是PooledConnection,我們
    叫它池中的連結,可以通過實現ConnectionPoolDataSource,從中得到PooledConnection,
    這部分本來是廠商實現的,但這部份實現和傳統的連結池沒有什么大的區別,主要是從
    ConnectionPoolDataSource中得到PooledConnection的物理連結,但如何從PooledConnection
    中getConnection(),返回給用戶.這部分實現就是DataSource實現的性能高低的關鍵,一般
    來說,我們可以先把一個物理連結PooledConnection和多個客戶連結相關連來增加性能,也
    就是一個PooledConnection本身再作為一個工場的種子,通過一個PooledConnection再返回
    多個Connection,說白了就是多個Connection的請求通過一個PooledConnection傳遞給數據庫.
    只要用戶調用Connection的close()方法,就打斷這個Connetion與PooledConnection的關聯而
    讓PooledConnection可以和新的Connection進行關聯.

    JDBC事務

    JDBC1開始,就支持本地事務,所謂要地事務,就是在一個連結中的多個操作可以作為一個事務
    過程來提交.注意,只要你使用conn.setAutoCommit(false);方法就隱式地打開了一個事務.當
    事務被commit或abort時,隱含的是打開了一個新的事務.
    另外,當一次事務被commit或abort,PreparedSattement和CallableStatement綁定的結果集全
    部被關閉,而普通的Statement綁一的結果集將被維持.
    在處理多個操作時:
    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();
    在這里,我們要么把四個操作一起回滾,或一起提交,但如果我們認為,1-3的操作是要求一致完
    成,而4的操作在一至三完成時再完成.在經前的版本中我們要把它們分開在兩次事務中,但在
    JDBC3.0以后,我們可以利用conn.setSavepoint() 來得到一個SavePoint來對同一事務中不同階
    段進行斷點保存.然后可以在任何斷點上進行提交和回滾.同時我們還可以利用
    conn.setTransactionIsolation()來設置隔離級別.
    要注意的是,對事務的支持要看數據庫的具體實現.如果數據庫本身不支持事務,那么以上的操作
    都是無效的,可以從 DatabaseMetaData中查詢數據庫對事務的支持情況.

    畢竟,本地事務功能并不是很強,而如果不是編程人員對SQL語句傳入錯誤,那么在一次連結中
    多個操作只完成部份的機率并不容易發生(當然有時還會發生的,要不本地事務就不會產生了).
    其實,JDBC事務最重要的是分布式事務,即同時操作不同的連結,可能是同物理庫的不同空間,也
    可能是同一主機的不同數據庫或不同主機的多個數據庫.這就很難保證每個操作都是成功的,發
    生操作不一致的機會太多了,可以說如果不在事務中測試你就無法相信操作的一致性.所以分布
    式事務是JDBC的重要技術.
    在下一節我們重點介紹JDBC分布式事務.
    posted on 2006-01-09 15:01 javaGrowing 閱讀(302) 評論(0)  編輯  收藏 所屬分類: JDBC

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 亚洲一级二级三级不卡| 拔擦拔擦8x华人免费久久| 久久久免费的精品| 国产无遮挡裸体免费视频在线观看 | 精品亚洲成a人片在线观看少妇| 亚洲婷婷五月综合狠狠爱| 亚洲午夜国产精品无码| 亚洲中文字幕无码不卡电影| 国产精品亚洲高清一区二区| 亚洲无码高清在线观看| 曰韩亚洲av人人夜夜澡人人爽| 国产亚洲AV夜间福利香蕉149 | 日韩精品福利片午夜免费观着| 国产精品久久久久久久久久免费 | 三级网站在线免费观看| 免费人成激情视频在线观看冫 | 美景之屋4在线未删减免费| 黄色网址大全免费| 中文字幕免费视频精品一| 国产好大好硬好爽免费不卡 | 免费看一级毛片在线观看精品视频| 老司机午夜性生免费福利| 三级片免费观看久久| a毛片在线免费观看| 999任你躁在线精品免费不卡| 国产精品成人免费福利| 天天看片天天爽_免费播放| 免费国产美女爽到喷出水来视频| 亚洲福利精品一区二区三区| 亚洲中文字幕无码久久精品1| 久久亚洲熟女cc98cm| 亚洲中文字幕无码中文字| 色吊丝免费观看网站| 国产永久免费高清在线| 四虎精品视频在线永久免费观看| 国拍在线精品视频免费观看| 国产精品成人免费综合| 亚洲欧洲∨国产一区二区三区| 精品无码一区二区三区亚洲桃色| 中文字幕 亚洲 有码 在线 | 亚洲一级黄色大片|