日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java实现转账功能_如何利用Java代码模拟银行转账这一功能?

發(fā)布時(shí)間:2025/3/20 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java实现转账功能_如何利用Java代码模拟银行转账这一功能? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

今天是劉小愛自學(xué)Java的第70天。

感謝你的觀看,謝謝你。

話不多說,開始今天的學(xué)習(xí):

轉(zhuǎn)賬,相信基本都接觸過,無論是線下用銀行卡轉(zhuǎn)賬還是線上用手機(jī)轉(zhuǎn)賬,本質(zhì)上都是差不多的。

一、轉(zhuǎn)賬案例

需要兩個(gè)賬戶:劉小愛賬戶和劉媽媽賬戶;劉小愛賬戶轉(zhuǎn)出;劉媽媽賬戶轉(zhuǎn)入。

劉小愛要給劉媽媽轉(zhuǎn)賬,畢竟要攢著將來娶媳婦,emm……就轉(zhuǎn)1000吧(看來是娶不到媳婦了……)

在數(shù)據(jù)庫中用sql語句編寫一個(gè)賬戶信息表,同時(shí)也是對sql語法的一次回顧:

當(dāng)然,賬戶信息表肯定是在銀行的數(shù)據(jù)庫中的,并且是最重要的一個(gè)存在,會嚴(yán)加防范。

我這邊只是模擬這個(gè)案例,所以在自己的數(shù)據(jù)庫上創(chuàng)建了一個(gè)賬戶信息表。

表很簡單:主要兩個(gè)屬性,賬戶名和賬戶余額。

現(xiàn)在編寫代碼:

劉小愛賬戶給劉媽媽賬戶轉(zhuǎn)1000劉小愛賬戶余額減少1000劉媽媽賬戶余額增加1000

根據(jù)代碼可拓展性原則,并未將賬戶名,轉(zhuǎn)賬金額寫死。

①提示用戶輸入信息

這個(gè)本來是應(yīng)該在網(wǎng)頁上面顯示信息提醒用戶的,但是這塊還不會,就用Java中的控制臺來模擬。

也就是Scanner這個(gè)類的使用。

②從德魯伊連接池中獲取連接

這個(gè)我們昨天將德魯伊連接池封裝進(jìn)工具類JdbcUtil了,所以可以直接用工具類獲取連接。

③轉(zhuǎn)出賬戶預(yù)編譯

轉(zhuǎn)出賬戶名為inName,轉(zhuǎn)出的金額為money。

那么要將數(shù)據(jù)庫中對應(yīng)賬戶名的money減少對應(yīng)的金額。

④轉(zhuǎn)入賬戶預(yù)編譯

轉(zhuǎn)入賬戶名為outName,轉(zhuǎn)入金額為money。

那么要將數(shù)據(jù)庫中對應(yīng)賬戶名的money增加對應(yīng)的金額。

代碼編寫完成,現(xiàn)在再做測試:

指定轉(zhuǎn)出賬戶為:劉小愛

指定轉(zhuǎn)入賬戶為:劉媽媽

設(shè)定轉(zhuǎn)賬金額為:1000

二、事務(wù)的引入

要知道我們轉(zhuǎn)賬本質(zhì)上是轉(zhuǎn)出方先將錢轉(zhuǎn)到銀行,銀行再將錢轉(zhuǎn)入到轉(zhuǎn)入方。

這樣就會存在一個(gè)問題:

比如劉小愛的錢從他的賬戶中轉(zhuǎn)出去了,但是銀行還沒有將錢轉(zhuǎn)到劉媽媽的賬戶中,突然銀行發(fā)生了突發(fā)事故。

至于什么事故,反正就是沒法轉(zhuǎn)錢到劉媽媽賬戶上了。

用代碼模擬這種情況:

上面有異常是直接throws了,現(xiàn)在要自行處理。

使用IDEA開發(fā)工具快捷鍵Ctrl+Alt+T:可以選擇一塊代碼try……catch

①轉(zhuǎn)出賬戶

這段代碼就相當(dāng)于劉小愛賬戶里的錢轉(zhuǎn)到銀行了。

②自己寫一個(gè)異常

我們都知道分母是不能為0的,也就是說程序執(zhí)行到這里會報(bào)錯(cuò)。這個(gè)是用來模擬銀行出事了。

③轉(zhuǎn)入賬戶

本來銀行是應(yīng)該將錢轉(zhuǎn)入到劉媽媽賬戶的,但是因?yàn)榘l(fā)生了異常,導(dǎo)致這段代碼沒法執(zhí)行。

我們看看最終的結(jié)果:

劉小愛賬戶里的錢減少了,但是劉媽媽賬戶里的錢沒有增加。那這怎么行?這不是在坑我么?

所以為了解決這個(gè)問題,數(shù)據(jù)庫就引入了事務(wù)的概念。

事務(wù)指的是邏輯上的一組操作,組成這組操作的各個(gè)單元要么全都成功,要么全都失敗。

以上面的這個(gè)例子來說明就是:

有兩個(gè)操作:轉(zhuǎn)出賬戶和轉(zhuǎn)入賬戶。轉(zhuǎn)出成功,轉(zhuǎn)入成功,就成功了。成功了,事務(wù)提交,轉(zhuǎn)賬完成。轉(zhuǎn)出成功,轉(zhuǎn)入失敗,那對不起,全部失敗。轉(zhuǎn)出失敗,轉(zhuǎn)入成功,也還是失敗。失敗了,事務(wù)回滾,回到轉(zhuǎn)賬前的狀態(tài)。三、事務(wù)操作

1mysql中的事務(wù)

①mysql中開啟事務(wù)

start transaction;

transaction,翻譯過來就是事務(wù)的意思。

②mysql中事務(wù)提交

commit;就一個(gè)單詞,翻譯過來就是提交的意思。

③mysql中事務(wù)回滾

rollback;翻譯過來也就是回滾的意思,回滾是什么意思呢?就可以理解成回到開啟事務(wù)時(shí)的狀態(tài)。

2Java中的事務(wù)

①Java中開啟事務(wù)

Java中連接接口collection有一個(gè)api叫setAutoCommit()

翻譯過來就是設(shè)置自動提交,顧名思義也就是說:

如果是true,事務(wù)會自動提交;

如果是false,事務(wù)不自動提交。

將其設(shè)置成false,我們手動提交。

②Java中提交事務(wù)

collection也有一個(gè)commit()方法,顧名思義也就是提交的意思。

③Java中提交事務(wù)

collection還有一個(gè)rollback()方法,顧名思義也就是回滾的意思。

好,現(xiàn)在代碼編寫完:

如果有異常,執(zhí)行③事務(wù)回滾,數(shù)據(jù)庫數(shù)據(jù)不變。如果沒有異常,執(zhí)行②事務(wù)提交,數(shù)據(jù)庫數(shù)據(jù)改變當(dāng)然,我發(fā)現(xiàn)了一個(gè)問題:

就是哪怕沒有事務(wù)回滾,如果有異常,因?yàn)楦緵]有執(zhí)行到事務(wù)提交,數(shù)據(jù)庫數(shù)據(jù)還是不會改變的。

也就是說這個(gè)例子中,就算沒有事務(wù)回滾,結(jié)果也沒影響。

我嘗試著將第一步中設(shè)置成自動提交,然后出現(xiàn)異常事務(wù)回滾,發(fā)現(xiàn)也沒用。

所以總結(jié)就是:

事務(wù)提交前出現(xiàn)異常,就不提交了,那么回滾豈不是沒用?

事務(wù)提交了,說明沒錯(cuò),那么回滾豈不是還是沒用?

那么問題來了,回滾到底有什么用呢?

這個(gè)問題我網(wǎng)上查詢了下,暫時(shí)還不太清楚,它肯定是有它的應(yīng)用場景的,只不過說我的水平有限,暫時(shí)還沒有發(fā)現(xiàn)。

最后:

謝謝你的觀看。

如果可以的話,麻煩幫忙點(diǎn)個(gè)贊,謝謝你。

總結(jié)

以上是生活随笔為你收集整理的java实现转账功能_如何利用Java代码模拟银行转账这一功能?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。