Java 事務詳解及簡單應用執行個體_java

來源:互聯網
上載者:User

Java事務的簡單使用 

 Java事務在一些面試中會被問到。

面試的時候,我們首先要回答的是:事務能夠保證資料的完整性和一致性。 

如果功力深厚點的話:就說一些原理(任務開始前先設定不提交任務,在所有任務完成後再提交任務,
如果任務在中間斷開,就執行復原,撤銷前面執行的任務),簡單一點就舉個的例子(比如存錢和取錢的問題。
比如:銀行在兩個賬戶之間轉賬,從A賬戶轉入B賬戶1000元,系統先減少A賬戶的1000元,然後再為B帳號增加1000元。如果全部執行成功,資料庫處於一致性;如果僅執行完A賬戶金額的修改,而沒有增加B賬戶的金額,則資料庫就處於不一致狀態,這時就需要取消前面的操作。) 

本文對java事務做簡單的探討,一問到java事務我們要知道這和資料庫相關。 

一.先看一段簡單的代碼  

使用JDBC方式進行交易處理

public int delete(int sID) {   //實現資料庫連接的類  DataBaseConnection dbc = new DataBaseConnection();   //擷取連線物件  Connection con = dbc.getConnection();   try {     con.setAutoCommit(false);// 更改JDBC事務的預設提交方式     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事務     con.setAutoCommit(true);// 恢複JDBC事務的預設提交方式     dbc.close();     return 1;   }   catch (Exception exc) {     con.rollBack();//復原JDBC事務     dbc.close();     return -1;   } } 

上面這一段代碼就是一個比較簡單的java事務的執行。
上面三次執行刪除操作,只要有一次執行失敗,都會執行任務復原,相當於要麼一起成功,要麼什麼都沒做。

 如果沒有事務的管理,前面執行了就會馬上在資料庫裡面更新,
執行到哪裡失敗就退出不再執行後面的任務,不能保證資料的一致性。

 二.Java事務的基礎概念

 原子性(Atomicity)   :事務是一個完整的操作。事務的各步操作是不可分的(原子的);
       要麼都執行,要麼都不執行
一致性(Consistency):當事務完成時,資料必須處於一致狀態
隔離性(Isolation)    :對資料進行修改的所有並發事務是彼此隔離的,這表明事務必須是獨立的,

它不應以任何方式依賴於或影響其他事務
永久性(Durability)  :事務完成後,它對資料庫的修改被永久保持,交易記錄能夠保持事務的永久性 

java的交易處理描述:如果對資料庫進行多次操作,每一次的執行或步驟都是一個事務.
如果資料庫操作在某一步沒有執行或出現異常而導致事務失敗,這樣有的事務被執行有的就沒有被執行,
從而就有了事務的復原,取消先前的操作.....   

在資料庫操作中,一項事務是指由一條或多條對資料庫更新的sql語句所組成的一個不可分割的工作單元。
只有當事務中的所有操作都正常完成了,整個事務才能被提交到資料庫,如果有一項操作沒有完成,
就必須撤消整個事務。  

例如在銀行的轉帳事務中,假定張三從自己的帳號上把1000元轉到李四的帳號上,相關的sql語句如下:

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

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

這個兩條語句必須作為一個完成的事務來處理。只有當兩條都成功執行了,才能提交這個事務。
如果有一句失敗,整個事務必須撤消。

在connection類中提供了3個控制事務的方法:
(1) setAutoCommit(Boolean autoCommit):設定是否自動認可事務;
(2) commit();提交事務;
(3) rollback();撤消事務;  

在jdbc api中,預設的情況為自動認可事務,也就是說,每一條對資料庫的更新的sql語句代表一項事務,
操作成功後,系統自動調用commit()來提交,否則將調用rollback()來撤消事務。

在jdbc api中,可以通過調用setAutoCommit(false) 來禁止自動認可事務。
然後就可以把多條更新資料庫的sql語句做為一個事務,在所有操作完成之後,調用commit()來進行整體提交。
倘若其中一項 sql操作失敗,就不會執行commit()方法,而是產生相應的sqlException,
此時就可以捕獲異常代碼塊中調用rollback()方法撤消事務。

一般來說,專門開發資料庫的開發人員肯定是要對事務瞭解很深入的,
但是一般的程式員不需要花費太多時間在這方面。對大概作用有個理解就可以了。

感謝閱讀,希望能協助到大家,謝謝大家對本站的支援!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.