實(shí)際上,一個(gè)Java應(yīng)用系統(tǒng),如果要操作數(shù)據(jù)庫(kù),則通過(guò)JDBC來(lái)實(shí)現(xiàn)的。增加、修改、刪除都是通過(guò)相應(yīng)方法間接來(lái)實(shí)現(xiàn)的,事務(wù)的控制也相應(yīng)轉(zhuǎn)移到Java程序代碼中。因此,數(shù)據(jù)庫(kù)操作的事務(wù)習(xí)慣上就稱(chēng)為Java事務(wù)。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序定制開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了岑鞏免費(fèi)建站歡迎大家使用!
在java中最常見(jiàn)的事務(wù)就是數(shù)據(jù)庫(kù)操作了。舉個(gè)例子就是完成一件事要在A表里插一條數(shù)據(jù),B表里刪一條數(shù)據(jù),這兩步要都成功,這件事才算做完。其中一步失敗,那么另一步就不做,或者做了但最后恢復(fù)原樣。
事務(wù)你可以去看概念,我給你說(shuō)下簡(jiǎn)單理解。你去斗魚(yú)送禮物,扣了你的魚(yú)丸給主播送了禮物,這倆操作必須是綁定在一起的,不然單個(gè)任何一個(gè)完成了另外一個(gè)沒(méi)完成都會(huì)出問(wèn)題。
Java中使用事務(wù)處理,首先要求數(shù)據(jù)庫(kù)支持事務(wù)。如使用MySQL的事務(wù)功能,就要求MySQL的表類(lèi)型為Innodb才支持事務(wù)。否則,在Java程序中做了commit或rollback,但在數(shù)據(jù)庫(kù)中根本不能生效。
原子性:指整個(gè)事務(wù)是不可以分割的工作單元。只有事務(wù)中所有的操作執(zhí)行成功,才算整個(gè)事務(wù)成功,事務(wù)中任何一個(gè)SQL語(yǔ)句執(zhí)行失敗,那么已經(jīng)執(zhí)行成功的SQL語(yǔ)句也必須撤銷(xiāo),數(shù)據(jù)庫(kù)狀態(tài)應(yīng)該回到執(zhí)行事務(wù)前的狀態(tài)。
JAva 對(duì)事務(wù)得處理主要體現(xiàn)在持久層,但是由于spring的出現(xiàn),事務(wù)全部在服務(wù)層完成了。
1、Java中的事務(wù)處理 一般情況下,J2EE應(yīng)用服務(wù)器支持JDBC事務(wù)、JTA(Java Transaction API)事務(wù)、容器管理事務(wù)。一般情況下,最好不要在程序中同時(shí)使用上述三種事務(wù)類(lèi)型,比如在JTA事務(wù)中嵌套JDBC事務(wù)。
2、1)在數(shù)據(jù)分區(qū)的方案中:如果A帳號(hào)和B帳號(hào)的數(shù)據(jù)不在同一臺(tái)服務(wù)器上怎么辦?我們需要一個(gè)跨機(jī)器的事務(wù)處理。也就是說(shuō),如果A的扣錢(qián)成功了,但B的加錢(qián)不成功,我們還要把A的操作給回滾回去。
3、在java中 一般有兩種方式可以進(jìn)行數(shù)據(jù)庫(kù)事務(wù)處理:一是:如果你用到開(kāi)源框架hibernater的話,在hibernater里面它提供了事務(wù)工廠,你可以利用這個(gè)類(lèi)來(lái)進(jìn)行事務(wù)操作。二是:我們一般有Connection連接對(duì)象來(lái)對(duì)事務(wù)進(jìn)行操作。
4、只有事務(wù)中所有的操作執(zhí)行成功,才算整個(gè)事務(wù)成功,事務(wù)中任何一個(gè)SQL語(yǔ)句執(zhí)行失敗,那么已經(jīng)執(zhí)行成功的SQL語(yǔ)句也必須撤銷(xiāo),數(shù)據(jù)庫(kù)狀態(tài)應(yīng)該回到執(zhí)行事務(wù)前的狀態(tài)。
5、因此,數(shù)據(jù)庫(kù)操作的事務(wù)習(xí)慣上就稱(chēng)為Java事務(wù)。 \x0d\x0a 為什么需要事務(wù) \x0d\x0a 事務(wù)是為解決數(shù)據(jù)安全操作提出的,事務(wù)控制實(shí)際上就是控制數(shù)據(jù)的安全訪問(wèn)。
6、Java種運(yùn)用了大量的事務(wù)管理,就是對(duì)一系列的數(shù)據(jù)庫(kù)操作進(jìn)行統(tǒng)一的提交或回滾操作,比如說(shuō)做一個(gè)轉(zhuǎn)賬功能,要更改帳戶(hù)兩邊的數(shù)據(jù),這時(shí)候就必須要用事務(wù)才能算是嚴(yán)謹(jǐn)?shù)淖龇?。要么成功,要么失敗,保持?jǐn)?shù)據(jù)一致性。
Java中使用事務(wù)處理,首先要求數(shù)據(jù)庫(kù)支持事務(wù)。如使用MySQL的事務(wù)功能,就要求MySQL的表類(lèi)型為Innodb才支持事務(wù)。否則,在Java程序中做了commit或rollback,但在數(shù)據(jù)庫(kù)中根本不能生效。
一般情況下,J2EE應(yīng)用服務(wù)器支持JDBC事務(wù)、JTA(Java Transaction API)事務(wù)、容器管理事務(wù)。一般情況下,最好不要在程序中同時(shí)使用上述三種事務(wù)類(lèi)型,比如在JTA事務(wù)中嵌套JDBC事務(wù)。
什么是Java事務(wù) \x0d\x0a 通常的觀念認(rèn)為,事務(wù)僅與數(shù)據(jù)庫(kù)相關(guān)。 \x0d\x0a 事務(wù)必須服從ISO/IEC所制定的ACID原則。
在java中 一般有兩種方式可以進(jìn)行數(shù)據(jù)庫(kù)事務(wù)處理:一是:如果你用到開(kāi)源框架hibernater的話,在hibernater里面它提供了事務(wù)工廠,你可以利用這個(gè)類(lèi)來(lái)進(jìn)行事務(wù)操作。二是:我們一般有Connection連接對(duì)象來(lái)對(duì)事務(wù)進(jìn)行操作。
1)在數(shù)據(jù)分區(qū)的方案中:如果A帳號(hào)和B帳號(hào)的數(shù)據(jù)不在同一臺(tái)服務(wù)器上怎么辦?我們需要一個(gè)跨機(jī)器的事務(wù)處理。也就是說(shuō),如果A的扣錢(qián)成功了,但B的加錢(qián)不成功,我們還要把A的操作給回滾回去。
這里面的實(shí)現(xiàn)邏輯大概是這樣,首先spring獲取連接, 我們?cè)趕ervice方法里進(jìn)行數(shù)據(jù)庫(kù)的操作,然后方法結(jié)束, 如果正常結(jié)束,spring提交事務(wù),釋放連接。
分享名稱(chēng):事務(wù)java代碼例子 java實(shí)現(xiàn)事務(wù)的兩種方式
網(wǎng)頁(yè)URL:http://aaarwkj.com/article48/dspsohp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供自適應(yīng)網(wǎng)站、外貿(mào)建站、動(dòng)態(tài)網(wǎng)站、網(wǎng)站策劃、電子商務(wù)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)