java实现转账功能_如何利用Java代码模拟银行转账这一功能?
今天是劉小愛自學Java的第70天。
感謝你的觀看,謝謝你。
話不多說,開始今天的學習:
轉賬,相信基本都接觸過,無論是線下用銀行卡轉賬還是線上用手機轉賬,本質上都是差不多的。
一、轉賬案例
需要兩個賬戶:劉小愛賬戶和劉媽媽賬戶;劉小愛賬戶轉出;劉媽媽賬戶轉入。
劉小愛要給劉媽媽轉賬,畢竟要攢著將來娶媳婦,emm……就轉1000吧(看來是娶不到媳婦了……)
在數據庫中用sql語句編寫一個賬戶信息表,同時也是對sql語法的一次回顧:
當然,賬戶信息表肯定是在銀行的數據庫中的,并且是最重要的一個存在,會嚴加防范。
我這邊只是模擬這個案例,所以在自己的數據庫上創建了一個賬戶信息表。
表很簡單:主要兩個屬性,賬戶名和賬戶余額。
現在編寫代碼:
劉小愛賬戶給劉媽媽賬戶轉1000劉小愛賬戶余額減少1000劉媽媽賬戶余額增加1000
根據代碼可拓展性原則,并未將賬戶名,轉賬金額寫死。
①提示用戶輸入信息
這個本來是應該在網頁上面顯示信息提醒用戶的,但是這塊還不會,就用Java中的控制臺來模擬。
也就是Scanner這個類的使用。
②從德魯伊連接池中獲取連接
這個我們昨天將德魯伊連接池封裝進工具類JdbcUtil了,所以可以直接用工具類獲取連接。
③轉出賬戶預編譯
轉出賬戶名為inName,轉出的金額為money。
那么要將數據庫中對應賬戶名的money減少對應的金額。
④轉入賬戶預編譯
轉入賬戶名為outName,轉入金額為money。
那么要將數據庫中對應賬戶名的money增加對應的金額。
代碼編寫完成,現在再做測試:
指定轉出賬戶為:劉小愛
指定轉入賬戶為:劉媽媽
設定轉賬金額為:1000
二、事務的引入
要知道我們轉賬本質上是轉出方先將錢轉到銀行,銀行再將錢轉入到轉入方。
這樣就會存在一個問題:
比如劉小愛的錢從他的賬戶中轉出去了,但是銀行還沒有將錢轉到劉媽媽的賬戶中,突然銀行發生了突發事故。
至于什么事故,反正就是沒法轉錢到劉媽媽賬戶上了。
用代碼模擬這種情況:
上面有異常是直接throws了,現在要自行處理。
使用IDEA開發工具快捷鍵Ctrl+Alt+T:可以選擇一塊代碼try……catch
①轉出賬戶
這段代碼就相當于劉小愛賬戶里的錢轉到銀行了。
②自己寫一個異常
我們都知道分母是不能為0的,也就是說程序執行到這里會報錯。這個是用來模擬銀行出事了。
③轉入賬戶
本來銀行是應該將錢轉入到劉媽媽賬戶的,但是因為發生了異常,導致這段代碼沒法執行。
我們看看最終的結果:
劉小愛賬戶里的錢減少了,但是劉媽媽賬戶里的錢沒有增加。那這怎么行?這不是在坑我么?
所以為了解決這個問題,數據庫就引入了事務的概念。
事務指的是邏輯上的一組操作,組成這組操作的各個單元要么全都成功,要么全都失敗。
以上面的這個例子來說明就是:
有兩個操作:轉出賬戶和轉入賬戶。轉出成功,轉入成功,就成功了。成功了,事務提交,轉賬完成。轉出成功,轉入失敗,那對不起,全部失敗。轉出失敗,轉入成功,也還是失敗。失敗了,事務回滾,回到轉賬前的狀態。三、事務操作
1mysql中的事務
①mysql中開啟事務
start transaction;
transaction,翻譯過來就是事務的意思。
②mysql中事務提交
commit;就一個單詞,翻譯過來就是提交的意思。
③mysql中事務回滾
rollback;翻譯過來也就是回滾的意思,回滾是什么意思呢?就可以理解成回到開啟事務時的狀態。
2Java中的事務
①Java中開啟事務
Java中連接接口collection有一個api叫setAutoCommit()
翻譯過來就是設置自動提交,顧名思義也就是說:
如果是true,事務會自動提交;
如果是false,事務不自動提交。
將其設置成false,我們手動提交。
②Java中提交事務
collection也有一個commit()方法,顧名思義也就是提交的意思。
③Java中提交事務
collection還有一個rollback()方法,顧名思義也就是回滾的意思。
好,現在代碼編寫完:
如果有異常,執行③事務回滾,數據庫數據不變。如果沒有異常,執行②事務提交,數據庫數據改變當然,我發現了一個問題:
就是哪怕沒有事務回滾,如果有異常,因為根本沒有執行到事務提交,數據庫數據還是不會改變的。
也就是說這個例子中,就算沒有事務回滾,結果也沒影響。
我嘗試著將第一步中設置成自動提交,然后出現異常事務回滾,發現也沒用。
所以總結就是:
事務提交前出現異常,就不提交了,那么回滾豈不是沒用?
事務提交了,說明沒錯,那么回滾豈不是還是沒用?
那么問題來了,回滾到底有什么用呢?
這個問題我網上查詢了下,暫時還不太清楚,它肯定是有它的應用場景的,只不過說我的水平有限,暫時還沒有發現。
最后:
謝謝你的觀看。
如果可以的話,麻煩幫忙點個贊,謝謝你。
總結
以上是生活随笔為你收集整理的java实现转账功能_如何利用Java代码模拟银行转账这一功能?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python嵌入html_Python
- 下一篇: java飞机大战流程图_JAVA课程设计