java資料庫中存在事務的概念,最經典的例子的就是轉賬,張三給李四轉賬,那麼首先要扣除內張三的錢,然後加容給李四,這整個過程不能分開操作,整個過程稱為事務,那麼如果現在張三扣除了錢,在轉賬給李四之前出現了異常,那麼問題來了,現在轉賬動作做到一半,如果不回滾事務的話,那麼就出現張三錢少了,但是李四沒加錢,這是不允許的,所以出現了回滾事務的這一動作。這樣好理解些么?
② Java編程請解釋一下,業務邏輯概念和事務邏輯概念,兩者又有什麼關系和區別
所謂邏輯業務就是如何把數據層的代碼結合在一起,從而實現需要的功能
事務邏輯概念:事務處理點和數據訪問點
③ java在用ssh做項目的時候,不是說增,刪,改必須要加事務嗎
執行當然可以了。
你首先要明白事務是干什麼的。
事務是把一系列的操作當做一個事務,當某個步驟失敗時,就將所有操作回滾,所有操作都成功就提交。比如算費用的,你付錢給我,就要把你的賬戶的錢減掉一筆,再在我的賬戶下把錢加上一筆。這必須做成一個事務,要不在減你的錢的時候出問題,比如網路故障,你的錢少了,但是我的錢沒加,這樣就出問題了。
你說的增刪改,只是對一個表的操作。不寫在事務里也行,當對多個表操作時,最好用在事務里。
而且SPRING做事務 也很簡單。
手打,主啊 給點分吧
④ java事務和鎖的問題,如果事務沒提交,其他線程能修改資料庫中的同條數據嗎
題主,你說的這種情況是允許出現的。這與事務的隔離程度有關。
如果事務隔離程度設置得當,就沒有必要顯式的通過synchronized保護資源(除非資源是某個service中的公共屬性)。
⑤ 1spring的事務是什麼與資料庫的事務是否一樣
本質上其實是同一個概念,spring的事務是對資料庫的事務的封裝,最後本質的實現還是在資料庫內,假如資料庫不支持容事務的話,spring的事務是沒有作用的.資料庫的事務說簡單就只有開啟,回滾和關閉,spring對資料庫事務的包裝,原理就是拿一個數據連接,根據spring的事務配置,操作這個數據連接對資料庫進行事務開啟,回滾或關閉操作.但是spring除了實現這些,還配合spring的傳播行為對事務進行了更廣泛的管理.其實這里還有個重要的點,那就是事務中涉及的隔離級別,以及spring如何對資料庫的隔離級別進行封裝.事務與隔離級別放在一起理解會更好些.以上回答希望能幫助到你.
⑥ 怎麼理解java中的業務邏輯層,數據訪問層,表示層
三層架構(3-tier application) 通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。區分層次的目的即為了「高內聚,低耦合」的思想。
1、表現層(UI):通俗講就是展現給用戶的界面,即用戶在使用一個系統的時候他的所見所得。(負責展示而已)
2、業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。(關鍵在於由原始數據抽象出邏輯數據)能夠提供interface\API層次上所有的功能。,「中間業務層」的實際目的是將「數據訪問層」的最基礎的存儲邏輯組合起來,形成一種業務規則
3、數據訪問層(DAL):該層所做事務直接操作資料庫,針對數據的增添、刪除、修改、查找等。(關鍵在於粒度的把握)要保證「數據訪問層」的中的函數功能的原子性!即最小性和不可再分。「數據訪問層」只管負責存儲或讀取數據就可以了。
多寫寫項目,多了解項目結構大概就能知道這樣的好處了
⑦ java 什麼情況下需要事務
Java事務控制是構建J2EE應用不可缺少的一部分,合理選擇應用何種事務對整個應用系統來說至關重要。一般說來,在單個JDBC 連接連接的情況下可以選擇JDBC事務,在跨多個連接或者資料庫情況下,需要選擇使用JTA事務,如果用到了EJB,則可以考慮使用EJB容器事務。
⑧ 事務的提交和回滾是什麼意思 Java
一組業務整體處理的行為叫一個事務。這一組的業務都能成功處理,我們就可以把這個事務提交來保存你已做的行為結果。但如果一組中有任何的差錯出現的話,我們就認為這事務不成功,需要回滾來撤消之前的操作。舉例:你去銀行轉賬,轉賬我們有兩步吧,從你賬戶中取出錢再往他賬戶中加錢。那這兩步銀行是必須要確保正確無誤的進行的。要被看做成一個事務。其中任何一步出錯就算是轉賬失敗,但可能你這時是已經從你賬戶中扣了錢了,又沒往他賬戶里加錢?怎麼辦算了?你不肯吧。所以銀行會事務回滾,不保存你剛才的操作,即恢復到你沒轉賬之前的狀態。累啊
⑨ java中的事務到底怎麼理解舉個實際的例子
比如說你去銀行轉賬,將將 A 賬戶中的金額轉到B賬戶。
A 語句:update Table set amount = amount - 100 where id = 'A'"
B語句:update Table set amount = amount + 100 where id = 'B'"
會有兩條update語句,如果不專用事務處理的屬話,在A語句執行完之後,在執行B語句的時候出錯,那麼A賬戶的金額減少了,B賬戶的金額卻沒有增加,這就有問題了
所以要用到事務來控制,如果B語句出現錯誤,就將事務回滾,A賬戶的金額也不會減少。
如果A。B都執行成功,事務提交
簡單來說就是所有在事務中的語句必須全部執行成功,事務才會提交,如果有一條執行失敗,事務就會回滾。
⑩ java事務相關
Java中的事務處理
一般情況下,J2EE應用伺服器支持JDBC事務、JTA(JavaTransactionAPI)事務、容器管理事務。一般情況下,最好不要在程序中同時使用上述三種事務類型,比如在JTA事務中嵌套JDBC事務。第二方面,事務要在盡可能短的時間內完成,不要在不同方法中實現事務的使用。下面我們列舉兩種事務處理方式。
1、JavaBean中使用JDBC方式進行事務處理
在JDBC中怎樣將多個SQL語句組合成一個事務呢?在JDBC中,打開一個連接對象Connection時,預設是auto-commit模式,每個SQL語句都被當作一個事務,即每次執行一個語句,都會自動的得到事務確認。為了能將多個SQL語句組合成一個事務,要將auto-commit模式屏蔽掉。在auto-commit模式屏蔽掉之後,如果不調用commit()方法,SQL語句不會得到事務確認。在最近一次commit()方法調用之後的所有SQL會在方法commit()調用時得到確認。
publicintdelete(intsID){
dbc=newDataBaseConnection();
Connectioncon=dbc.getConnection();
try{
con.setAutoCommit(false);//更改JDBC事務的默認提交方式
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
con.commit();//提交JDBC事務
con.setAutoCommit(true);//恢復JDBC事務的默認提交方式
dbc.close();
return1;
}
catch(Exceptionexc){
con.rollBack();//回滾JDBC事務
exc.printStackTrace();
dbc.close();
return-1;
}
}
2、SessionBean中的JTA事務
JTA是事務服務的J2EE解決方案。本質上,它是描述事務介面(比如UserTransaction介面,開發人員直接使用該介面或者通過J2EE容器使用該介面來確保業務邏輯能夠可靠地運行)的J2EE模型的一部分。JTA具有的三個主要的介面分別是UserTransaction介面、TransactionManager介面和Transaction介面。這些介面共享公共的事務操作,例如commit()和rollback(),但是也包含特殊的事務操作,例如suspend(),resume()和enlist(),它們只出現在特定的介面上,以便在實現中允許一定程度的訪問控制。例如,UserTransaction能夠執行事務劃分和基本的事務操作,而TransactionManager能夠執行上下文管理。
應用程序可以調用UserTransaction.begin()方法開始一個事務,該事務與應用程序正在其中運行的當前線程相關聯。底層的事務管理器實際處理線程與事務之間的關聯。UserTransaction.commit()方法終止與當前線程關聯的事務。UserTransaction.rollback()方法將放棄與當前線程關聯的當前事務。
publicintdelete(intsID){
DataBaseConnectiondbc=null;
dbc=newDataBaseConnection();
dbc.getConnection();
UserTransactiontransaction=sessionContext.getUserTransaction();//獲得JTA事務
try{
transaction.begin();//開始JTA事務
dbc.executeUpdate("deletefrombylawwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_contentwhereID="+sID);
dbc.executeUpdate("deletefrombylaw_affixwherebylawid="+sID);
transaction.commit();//提交JTA事務
dbc.close();
return1;
}
catch(Exceptionexc){
try{
transaction.rollback();//JTA事務回滾
}
catch(Exceptionex){
//JTA事務回滾出錯處理
ex.printStackTrace();
}
exc.printStackTrace();
dbc.close();
return-1;
}
}