<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://www.tkk7.com/sodmewuhan/archive/2006/04/22/42505.html


    posted on 2007-09-16 14:50 Ke 閱讀(1315) 評論(0)  編輯  收藏 所屬分類: hibernate
    主站蜘蛛池模板: 亚洲精品久久久www| 亚洲福利视频导航| 成人免费一区二区三区| 亚洲第一中文字幕| 国产高清在线免费视频| 免费人成在线观看视频高潮| 亚洲同性男gay网站在线观看| 五月婷婷亚洲综合| 51在线视频免费观看视频| 黄色毛片免费网站| 亚洲最新在线视频| 亚洲中久无码永久在线观看同| 91成人免费在线视频| 黄色视频在线免费观看| 亚洲色偷偷色噜噜狠狠99网| 久久亚洲精品视频| 又爽又黄无遮挡高清免费视频| 人妻无码久久一区二区三区免费| 精品免费AV一区二区三区| 亚洲第一页在线视频| 久久影院亚洲一区| 午夜小视频免费观看| 三年片在线观看免费观看大全一 | 免费人成视频在线观看免费| 亚洲图片在线观看| 亚洲精品线路一在线观看| 最新仑乱免费视频| 88xx成人永久免费观看| 精品97国产免费人成视频| 亚洲aⅴ无码专区在线观看 | 国产aⅴ无码专区亚洲av| 国产一级高清视频免费看| 欧洲乱码伦视频免费| 男人的天堂网免费网站| 一个人免费播放在线视频看片| 亚洲精品无码一区二区| 亚洲资源最新版在线观看| 亚洲AV本道一区二区三区四区| 久久精品亚洲男人的天堂| 免费在线一级毛片| 老司机永久免费网站在线观看|