亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java 事務(wù)詳解及簡(jiǎn)單應(yīng)用實(shí)例

 更新時(shí)間:2016年12月02日 11:53:23   作者:崢嶸life  
這篇文章主要介紹了Java 事務(wù)詳解及簡(jiǎn)單應(yīng)用實(shí)例的相關(guān)資料,java事務(wù)能夠保證數(shù)據(jù)的完整性和一致性,當(dāng)然這是書本上的知識(shí),具體如何應(yīng)用這里舉例說(shuō)明,需要的朋友可以參考下

Java事務(wù)的簡(jiǎn)單使用 

 Java事務(wù)在一些面試中會(huì)被問(wèn)到。

面試的時(shí)候,我們首先要回答的是:事務(wù)能夠保證數(shù)據(jù)的完整性和一致性。 

如果功力深厚點(diǎn)的話:就說(shuō)一些原理(任務(wù)開始前先設(shè)置不提交任務(wù),在所有任務(wù)完成后再提交任務(wù),
如果任務(wù)在中間斷開,就執(zhí)行回滾,撤銷前面執(zhí)行的任務(wù)),簡(jiǎn)單一點(diǎn)就舉個(gè)的例子(比如存錢和取錢的問(wèn)題。
比如:銀行在兩個(gè)賬戶之間轉(zhuǎn)賬,從A賬戶轉(zhuǎn)入B賬戶1000元,系統(tǒng)先減少A賬戶的1000元,然后再為B賬號(hào)增加1000元。如果全部執(zhí)行成功,數(shù)據(jù)庫(kù)處于一致性;如果僅執(zhí)行完A賬戶金額的修改,而沒有增加B賬戶的金額,則數(shù)據(jù)庫(kù)就處于不一致狀態(tài),這時(shí)就需要取消前面的操作。) 

本文對(duì)java事務(wù)做簡(jiǎn)單的探討,一問(wèn)到j(luò)ava事務(wù)我們要知道這和數(shù)據(jù)庫(kù)相關(guān)。 

一.先看一段簡(jiǎn)單的代碼  

使用JDBC方式進(jìn)行事務(wù)處理

public int delete(int sID) { 
  //實(shí)現(xiàn)數(shù)據(jù)庫(kù)連接的類
  DataBaseConnection dbc = new DataBaseConnection(); 
  //獲取連接對(duì)象
  Connection con = dbc.getConnection(); 
  try { 
    con.setAutoCommit(false);// 更改JDBC事務(wù)的默認(rèn)提交方式 
    dbc.executeUpdate("delete from xiao where ID=" + sID); 
    dbc.executeUpdate("delete from xiao_content where ID=" + sID); 
    dbc.executeUpdate("delete from xiao_affix where bylawid=" + sID); 
    con.commit();//提交JDBC事務(wù) 
    con.setAutoCommit(true);// 恢復(fù)JDBC事務(wù)的默認(rèn)提交方式 
    dbc.close(); 
    return 1; 
  } 
  catch (Exception exc) { 
    con.rollBack();//回滾JDBC事務(wù) 
    dbc.close(); 
    return -1; 
  } 
} 

上面這一段代碼就是一個(gè)比較簡(jiǎn)單的java事務(wù)的執(zhí)行。
上面三次執(zhí)行刪除操作,只要有一次執(zhí)行失敗,都會(huì)執(zhí)行任務(wù)回滾,相當(dāng)于要么一起成功,要么什么都沒做。

 如果沒有事務(wù)的管理,前面執(zhí)行了就會(huì)馬上在數(shù)據(jù)庫(kù)里面更新,
執(zhí)行到哪里失敗就退出不再執(zhí)行后面的任務(wù),不能保證數(shù)據(jù)的一致性。

 二.Java事務(wù)的基礎(chǔ)概念

 原子性(Atomicity)   :事務(wù)是一個(gè)完整的操作。事務(wù)的各步操作是不可分的(原子的);
       要么都執(zhí)行,要么都不執(zhí)行
一致性(Consistency):當(dāng)事務(wù)完成時(shí),數(shù)據(jù)必須處于一致狀態(tài)
隔離性(Isolation)    :對(duì)數(shù)據(jù)進(jìn)行修改的所有并發(fā)事務(wù)是彼此隔離的,這表明事務(wù)必須是獨(dú)立的,

它不應(yīng)以任何方式依賴于或影響其他事務(wù)
永久性(Durability)  :事務(wù)完成后,它對(duì)數(shù)據(jù)庫(kù)的修改被永久保持,事務(wù)日志能夠保持事務(wù)的永久性 

java的事務(wù)處理描述:如果對(duì)數(shù)據(jù)庫(kù)進(jìn)行多次操作,每一次的執(zhí)行或步驟都是一個(gè)事務(wù).
如果數(shù)據(jù)庫(kù)操作在某一步?jīng)]有執(zhí)行或出現(xiàn)異常而導(dǎo)致事務(wù)失敗,這樣有的事務(wù)被執(zhí)行有的就沒有被執(zhí)行,
從而就有了事務(wù)的回滾,取消先前的操作.....   

在數(shù)據(jù)庫(kù)操作中,一項(xiàng)事務(wù)是指由一條或多條對(duì)數(shù)據(jù)庫(kù)更新的sql語(yǔ)句所組成的一個(gè)不可分割的工作單元。
只有當(dāng)事務(wù)中的所有操作都正常完成了,整個(gè)事務(wù)才能被提交到數(shù)據(jù)庫(kù),如果有一項(xiàng)操作沒有完成,
就必須撤消整個(gè)事務(wù)。  

例如在銀行的轉(zhuǎn)帳事務(wù)中,假定張三從自己的帳號(hào)上把1000元轉(zhuǎn)到李四的帳號(hào)上,相關(guān)的sql語(yǔ)句如下:

update account set monery=monery-1000 where name='zhangsan'

update account set monery=monery+1000 where name='lisi'

這個(gè)兩條語(yǔ)句必須作為一個(gè)完成的事務(wù)來(lái)處理。只有當(dāng)兩條都成功執(zhí)行了,才能提交這個(gè)事務(wù)。
如果有一句失敗,整個(gè)事務(wù)必須撤消。

在connection類中提供了3個(gè)控制事務(wù)的方法:
(1) setAutoCommit(Boolean autoCommit):設(shè)置是否自動(dòng)提交事務(wù);
(2) commit();提交事務(wù);
(3) rollback();撤消事務(wù); 
 

在jdbc api中,默認(rèn)的情況為自動(dòng)提交事務(wù),也就是說(shuō),每一條對(duì)數(shù)據(jù)庫(kù)的更新的sql語(yǔ)句代表一項(xiàng)事務(wù),
操作成功后,系統(tǒng)自動(dòng)調(diào)用commit()來(lái)提交,否則將調(diào)用rollback()來(lái)撤消事務(wù)。

在jdbc api中,可以通過(guò)調(diào)用setAutoCommit(false) 來(lái)禁止自動(dòng)提交事務(wù)。
然后就可以把多條更新數(shù)據(jù)庫(kù)的sql語(yǔ)句做為一個(gè)事務(wù),在所有操作完成之后,調(diào)用commit()來(lái)進(jìn)行整體提交。
倘若其中一項(xiàng) sql操作失敗,就不會(huì)執(zhí)行commit()方法,而是產(chǎn)生相應(yīng)的sqlException,
此時(shí)就可以捕獲異常代碼塊中調(diào)用rollback()方法撤消事務(wù)。

一般來(lái)說(shuō),專門開發(fā)數(shù)據(jù)庫(kù)的開發(fā)者肯定是要對(duì)事務(wù)了解很深入的,
但是一般的程序員不需要花費(fèi)太多時(shí)間在這方面。對(duì)大概作用有個(gè)理解就可以了。

感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 性能爆棚的實(shí)體轉(zhuǎn)換復(fù)制工具M(jìn)apStruct使用詳解

    性能爆棚的實(shí)體轉(zhuǎn)換復(fù)制工具M(jìn)apStruct使用詳解

    這篇文章主要為大家介紹了性能爆棚的實(shí)體轉(zhuǎn)換復(fù)制工具M(jìn)apStruct使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Java?C++題解leetcode672燈泡開關(guān)示例

    Java?C++題解leetcode672燈泡開關(guān)示例

    這篇文章主要為大家介紹了Java?C++題解leetcode672燈泡開關(guān)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Java微信小程序醫(yī)院掛號(hào)系統(tǒng)

    Java微信小程序醫(yī)院掛號(hào)系統(tǒng)

    這篇文章主要介紹了基于Java微信小程序醫(yī)院掛號(hào)系統(tǒng),可以實(shí)現(xiàn)遠(yuǎn)程處理事務(wù),遠(yuǎn)程提交工作和隨時(shí)追蹤工作的狀態(tài),文中提供了解決思路和部分實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2023-03-03
  • 使用IDEA如何打包發(fā)布SpringBoot并部署到云服務(wù)器

    使用IDEA如何打包發(fā)布SpringBoot并部署到云服務(wù)器

    這篇文章主要介紹了使用IDEA如何打包發(fā)布SpringBoot并部署到云服務(wù)器問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java中的CountDownLatch同步工具類使用解析

    Java中的CountDownLatch同步工具類使用解析

    這篇文章主要介紹了Java中的CountDownLatch使用解析,CountDownLatch初始化的時(shí)候必須指定一個(gè)count,await方法會(huì)一直阻塞直到調(diào)用countdown方法,count為0,當(dāng)count為0時(shí),所有的等待線程都會(huì)被釋放,需要的朋友可以參考下
    2023-12-12
  • Java多線程實(shí)戰(zhàn)之交叉打印的兩種方法

    Java多線程實(shí)戰(zhàn)之交叉打印的兩種方法

    今天小編就為大家分享一篇關(guān)于Java多線程實(shí)戰(zhàn)之交叉打印的兩種方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Spring?Boot?快速使用?HikariCP?連接池配置詳解

    Spring?Boot?快速使用?HikariCP?連接池配置詳解

    Spring Boot 2.x 將其作為默認(rèn)的連接池組件,項(xiàng)目中添加 spring-boot-starter-jdbc 或 spring-boot-starter-data-jpa 模塊后,HikariCP 依賴會(huì)被自動(dòng)引入,這篇文章主要介紹了Spring?Boot使用HikariCP連接池配置詳解,需要的朋友可以參考下
    2023-06-06
  • Java中的信號(hào)量Semaphore詳細(xì)解讀

    Java中的信號(hào)量Semaphore詳細(xì)解讀

    這篇文章主要介紹了Java中的信號(hào)量Semaphore詳細(xì)解讀,Java信號(hào)量機(jī)制可以用來(lái)保證線程互斥,創(chuàng)建Semaphore對(duì)象傳入一個(gè)整形參數(shù),類似于公共資源,需要的朋友可以參考下
    2023-11-11
  • 關(guān)于RestTemplate中的Get請(qǐng)求

    關(guān)于RestTemplate中的Get請(qǐng)求

    這篇文章主要介紹了關(guān)于RestTemplate中的Get請(qǐng)求,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • java匿名內(nèi)部類實(shí)例簡(jiǎn)析

    java匿名內(nèi)部類實(shí)例簡(jiǎn)析

    匿名類是不能有名稱的類,所以沒辦法引用它們,必須在創(chuàng)建時(shí),作為new語(yǔ)句的一部分來(lái)聲明它們,需要了解更多的可以參考本文
    2012-11-11

最新評(píng)論