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

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

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

    隨筆 - 6  文章 - 129  trackbacks - 0
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(14)

    隨筆檔案(6)

    文章分類(467)

    文章檔案(423)

    相冊

    收藏夾(18)

    JAVA

    搜索

    •  

    積分與排名

    • 積分 - 825709
    • 排名 - 49

    最新評論

    閱讀排行榜

    評論排行榜

    一、           數據庫事務概念

    數據庫事務的特征: ACID

    Atomic (原子性)、 Consistency (一致性)、 Isolation (隔離性)和 Durability (持久性)。 DBMS 用日志來保證數據的原子性、一致性和持久性;用鎖的機制來保證數據的隔離性。

    二、           事務的邊界

    數據庫支持 2 種事務模式:自動提交和手動提交。

    JDBC API 的事務邊界

    try
    {
        Connection conn 
    =  java.sql.DriverManager,.getConnection(dbUrl,dbUser,dbPwd);
        conn.setAutoCommit(
    false );  // 設置成手動模式
        stmt  =  conn.createStatement();
        stmt.executeUpdate(
    " . " );  // 數據庫更新1
        stmt.executeUpdate( " . " );  // 數據庫更新2
        
        conn.commit();
    }

    catch (Exception e)
    {
        conn.rollback();
    }

    finally
    {
        stmt.close();
        conn.close();
    }

    Hibernate API 聲明事務邊界

    Session session  =  factory.openSession();
    Transaction tx;
    try  
    {
        tx 
    =  session.beginTransaction();  // 開始事務
        
    // 執行操作
        。。。。。
        
        tx.commit();
    }

    catch  (Exception e)
    {
        
    if  (tx != null )
        
    {
            tx.rollback();
        }

    }

    finally
    {
        session.close();
    }

    注:一個 session 可以對應多個事務,但是推薦的做法是一個 session 對應一個事務。

    三、            多事務的并發問題

    當多個事務同時訪問相同的數據的時候,程序如果沒有采取適當的隔離措施,就會發生數據庫的并發問題。常見的并發問題有:

    第一類丟失更新:撤消事務的時候,把其他的事務已經提交的數據給覆蓋了;

    臟讀;讀了沒有提交的數據;

    虛讀:一個事務讀到另外一個事務已經提交的新插入的數據;

    不可重復讀:一個事務讀到另外一個事務已經提交的更新的數據;

    第二類丟失更新:一個事務覆蓋另外一個事務已經提交的更新數據。 
    四、          

    一般地,大型的 DBMS 都會自動的管理鎖定機制,但是在對數據的安全性、完整性和一致性有特殊要求的地方,可以由事務本身來管理瑣的機制。

    有一點要關注的是:鎖的粒度越大,隔離性越好,并發性越差。

    按照鎖的程度來分有:

    共享鎖:用讀操作,非獨占的,其他事務可以讀,但是不能更新,并發性好;

    獨占鎖:用與 insert update delete 等語句,其他事務不能讀,也不能改,并發性差;

    更新鎖:執行 update 的時候,加鎖。

    死瑣:多是事務分別鎖定了一個資源,又請求鎖定對方已經鎖定的資源,就造成了請求環。

    降低死鎖的最好辦法是使用短事務。

    五、            數據庫的事務隔離級別

    數據庫提供 4 種事務隔離級別:

    Serializable :串行化;(隔離級別最高) 1

    Repeatable Read :可重復讀; 2

    Read Commited :讀已提交數據; 4

    Read Uncommited :讀未提交數據;(隔離級別最低) 8

    Hiberate 中的隔離級別的設置

    Hibernate 的配置文件中 hibernate.connection.isolation=2

    六、            悲觀鎖和樂觀瑣

    從應用程序的角度來看,鎖分為悲觀鎖和樂觀鎖。

    悲觀鎖:顯示的為程序加鎖,但是降低并發性。

    Select ……. For update;

    Hibernate 中的代碼

    Session.get(Account.class,net Long(1),LockMode.UPGRADE) // 程序采用悲觀鎖

    樂觀鎖:依靠 DBMS 來管理鎖,程序依靠版本控制來避免并發問題。

    在對象 - 關系映射的文件中,用 <version> 或者 <timestamp> 可以管理并發。樂觀瑣比悲觀瑣有更好的并發性,優先考慮樂觀瑣。  

    http://m.tkk7.com/sodmewuhan/archive/2006/04/22/42505.html


    posted on 2007-09-16 14:50 Ke 閱讀(1315) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 免费看黄网站在线看| 亚洲一区二区三区在线观看网站| 亚洲AV无码一区二三区 | 亚洲AV无码精品无码麻豆| 久久精品国产精品亚洲蜜月 | 久草免费福利资源站| 99在线精品免费视频九九视| 永久免费毛片手机版在线看| 亚洲国产精品一区二区三区久久| 国产偷国产偷亚洲清高APP| a毛片免费播放全部完整| 18禁超污无遮挡无码免费网站国产| 亚洲Aⅴ无码一区二区二三区软件| 亚洲经典在线观看| 国产日韩精品无码区免费专区国产 | 精品久久亚洲中文无码| 搜日本一区二区三区免费高清视频 | 亚洲人成小说网站色| 一级成人a毛片免费播放| www.亚洲色图.com| 精品无码国产污污污免费网站国产| 伊人久久大香线蕉亚洲| 亚洲人成网站色在线观看| 日本免费中文字幕在线看| 亚洲一区二区三区无码国产 | MM131亚洲国产美女久久| 一本色道久久88亚洲精品综合| 日韩高清免费观看| 人成午夜免费大片在线观看| 日韩亚洲欧洲在线com91tv| 国产亚洲情侣久久精品| 成人黄页网站免费观看大全| 亚洲免费在线播放| 国产性生大片免费观看性| 亚洲国产精品成人AV无码久久综合影院| 9久久免费国产精品特黄| 亚洲天堂电影在线观看| 国产无人区码卡二卡三卡免费| 久久亚洲熟女cc98cm| 91精品导航在线网址免费| 亚洲国产另类久久久精品 |