• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            woaidongmao

            文章均收錄自他人博客,但不喜標(biāo)題前加-[轉(zhuǎn)貼],因其丑陋,見(jiàn)諒!~
            隨筆 - 1469, 文章 - 0, 評(píng)論 - 661, 引用 - 0
            數(shù)據(jù)加載中……

            JDBC的數(shù)據(jù)庫(kù)事務(wù)

                     事務(wù)是工作中的基本邏輯單位。數(shù)據(jù)庫(kù)的主要責(zé)任是保存信息,因此它需要向用戶提供保存當(dāng)前程序狀態(tài)的方法。同樣,當(dāng)事務(wù)執(zhí)行過(guò)程中發(fā)生錯(cuò)誤時(shí),需要有一種方法使數(shù)據(jù)庫(kù)忽略當(dāng)前的狀態(tài),并回到前面保存的程序狀態(tài)。這兩種情況在數(shù)據(jù)庫(kù)用語(yǔ)中分別稱為提交事務(wù)和回滾事務(wù)。為了處理這兩種情況,JDBC API     包括了兩個(gè)方法commit()rollback(),分別用于實(shí)現(xiàn)事務(wù)的提交和回滾。在使用這兩個(gè)方法時(shí)通常要使用try ... catch語(yǔ)句捕獲數(shù)據(jù)庫(kù)實(shí)際運(yùn)行操作時(shí)可能發(fā)生的SQLException

                    
            當(dāng)多個(gè)用戶訪問(wèn)相同的數(shù)據(jù)時(shí),可能會(huì)出現(xiàn)3種問(wèn)題:
                

            ?  臟讀如果一個(gè)應(yīng)用程序使用了被另一個(gè)應(yīng)用程序修改過(guò)的數(shù)據(jù),而這個(gè)數(shù)據(jù)處于未提交狀態(tài),這時(shí)就會(huì)發(fā)生臟讀。第二個(gè)應(yīng)用程序隨后會(huì)請(qǐng)求回滾被其修改的數(shù)據(jù),從而導(dǎo)致第一個(gè)事務(wù)使用的數(shù)據(jù)被損壞,即所謂"變臟"
                

            ?  不可重復(fù)的讀如果一個(gè)事務(wù)獲得了數(shù)據(jù),而該數(shù)據(jù)隨后被另一個(gè)事務(wù)所更改,那么第一個(gè)事務(wù)再次讀取更改后的數(shù)據(jù),就會(huì)發(fā)生不可重復(fù)的讀。
                

            ?  虛讀如果一個(gè)事務(wù)通過(guò)某種查詢獲取了數(shù)據(jù),另一個(gè)事務(wù)修改了該數(shù)據(jù)的一部分,那么原來(lái)的事務(wù)第二次獲取該數(shù)據(jù)時(shí),就會(huì)發(fā)生虛讀。

                     
            為了解決這些由于多個(gè)用戶請(qǐng)求相同數(shù)據(jù)而引起的問(wèn)題,事務(wù)之間必須用鎖相互隔開(kāi)。多數(shù)主流的數(shù)據(jù)庫(kù)支持不同類型的鎖;因此,JDBC API支持不同類型的事務(wù),它們由 Connection對(duì)象的setTransactionLevel方法指定。在JDBC API中可以獲得下列事務(wù)級(jí)別:
                

            ?  TRANSACTION_NONE 說(shuō)明不支持事務(wù)。
                

            ?  TRANSACTION_READ_UNCOMMITTED 說(shuō)明一個(gè)事務(wù)在提交前其變化對(duì)于其他事務(wù)來(lái)說(shuō)是可見(jiàn)的。這樣臟讀、不可重復(fù)的讀和虛讀都是允許的。
                

            ?  TRANSACTION_READ_COMMITTED 說(shuō)明讀取未提交的數(shù)據(jù)是不允許的。這個(gè)級(jí)別仍然允許不可重復(fù)的讀和虛讀產(chǎn)生。
                

            ?  TRANSACTION_REPEATABLE_READ 說(shuō)明事務(wù)保證能夠再次讀取相同的數(shù)據(jù)而不會(huì)失敗,但虛讀仍然會(huì)出現(xiàn)。
                

            ?  TRANSACTION_SERIALIZABLE 是最高的事務(wù)級(jí)別,它防止臟讀、不可重復(fù)的讀和虛讀。 

                    
            運(yùn)行在TRANSACTION_SERIALIZABLE模式下的事務(wù)可以保證最高程度的數(shù)據(jù)完整性,但事務(wù)保護(hù)的級(jí)別越高,性能損失就越大。

                    
            假設(shè)我們現(xiàn)在有一個(gè)Connection對(duì)象con,那么設(shè)置事務(wù)級(jí)別的方法如下: 
                     con.setTransactionLevel(TRANSACTION_SERIALIZABLE) ;

                    
            你也可以使用getTransactionLevel()方法來(lái)獲取當(dāng)前事務(wù)的級(jí)別:
                      con.getTransactionLevel();

                    
            在默認(rèn)情況下,JDBC驅(qū)動(dòng)程序運(yùn)行在"自動(dòng)提交"模式下,即發(fā)送到數(shù)據(jù)庫(kù)的所有命令運(yùn)行在它們自己的事務(wù)中。這樣做雖然方便,但付出的代價(jià)是程序運(yùn)行時(shí)的開(kāi)銷比較大。我們可以利用批處理操作減小這種開(kāi)銷,因?yàn)樵谝淮闻幚聿僮髦锌梢詧?zhí)行多個(gè)數(shù)據(jù)庫(kù)更新操作。但批處理操作要求事務(wù)不能處于自動(dòng)提交模式下。為此,我們首先要禁用自動(dòng)提交模式。

                     executeBatch()方法返回一個(gè)更新計(jì)數(shù)的數(shù)組,每個(gè)值對(duì)應(yīng)于批處理操作中的一個(gè)命令。批處理操作可能會(huì)拋出一個(gè)類型為BatchUpdateException的異常,這個(gè)異常表明批處理操作中至少有一條命令失敗了。(T111)

             

            posted on 2009-08-11 13:06 肥仔 閱讀(247) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Web-后臺(tái)

            色狠狠久久综合网| 久久国产亚洲精品| 欧美精品一区二区精品久久| 久久久久久狠狠丁香| 久久久精品久久久久久 | 91久久香蕉国产熟女线看| 精品久久综合1区2区3区激情| 久久精品免费网站网| 日本欧美久久久久免费播放网| AV色综合久久天堂AV色综合在 | 日韩欧美亚洲国产精品字幕久久久| 久久人妻无码中文字幕| 成人综合伊人五月婷久久| 色婷婷狠狠久久综合五月| 久久久久亚洲AV无码专区首JN| 久久精品国产影库免费看 | 国产精品久久久久影院色| 亚洲国产成人久久一区WWW| 97精品国产91久久久久久| 久久精品国产亚洲AV忘忧草18| 日本精品久久久中文字幕| 亚洲午夜久久久影院伊人| 久久夜色精品国产www| 日本免费久久久久久久网站| 色综合久久中文字幕无码 | 99久久99久久久精品齐齐| 一日本道伊人久久综合影| 久久久久99精品成人片牛牛影视| 久久香蕉国产线看观看精品yw| 久久精品国产亚洲AV久| 一本大道久久香蕉成人网| 久久影视综合亚洲| 国产成人精品久久综合| 久久青青草原国产精品免费 | 久久久久99这里有精品10| 国产精品伊人久久伊人电影| 久久久久中文字幕| 久久香蕉国产线看观看99| 亚洲国产精品久久久久| 亚洲一本综合久久| 免费一级做a爰片久久毛片潮|