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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jdbc处理银行转账事务

發(fā)布時間:2023/12/10 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jdbc处理银行转账事务 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、建立余額表(bal_tab,余額必須大于0)、交易表(bus_tab)

二、建立轉(zhuǎn)賬事務類BankBusiness.java

import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException;import cn.yanchengdai.util.DataSourceForPool;/*** 銀行轉(zhuǎn)賬事務處理示例* @author Administrator**/ public class BankBusiness {/*** 處理轉(zhuǎn)賬的方法* @param transferMoney*/public void testTrans(int transferMoney) {/*從數(shù)據(jù)庫連接池中獲取數(shù)據(jù)庫連接*/Connection conn = DataSourceForPool.getConnection();/*交易表中插入兩條數(shù)據(jù)*/String sql1 = "insert into bus_tab values(?,?,?,?,?)";String sql2 = "insert into bus_tab values(?,?,?,?,?)";/*余額表中更新余額*/String sql3 = "update bal_tab set balance=(balance-?) where id = ?";String sql4 = "update bal_tab set balance=(balance+?) where id = ?";/*聲明PreparedStatement變量*/PreparedStatement ps1 = null;PreparedStatement ps2 = null;PreparedStatement ps3 = null;PreparedStatement ps4 = null;try {/*設(shè)置自動關(guān)閉connetion自動提交*/conn.setAutoCommit(false);ps1 = conn.prepareStatement(sql1);ps1.setInt(1, 1);ps1.setInt(2, transferMoney);ps1.setString(3, "轉(zhuǎn)出");ps1.setDate(4, new java.sql.Date(System.currentTimeMillis()));ps1.setInt(5, 100);ps2 = conn.prepareStatement(sql2);ps2.setInt(1, 2);ps2.setInt(2, transferMoney);ps2.setString(3, "轉(zhuǎn)入");ps2.setDate(4, new java.sql.Date(System.currentTimeMillis()));ps2.setInt(5, 200);ps3 = conn.prepareStatement(sql3);ps3.setInt(1, transferMoney);ps3.setInt(2, 100);ps4 = conn.prepareStatement(sql4);ps4.setInt(1, transferMoney);ps4.setInt(2, 200);ps1.executeUpdate();ps2.executeUpdate();ps3.executeUpdate();ps4.executeUpdate();/*以上順利執(zhí)行,則提交事務*/conn.commit();System.out.println("轉(zhuǎn)賬成功");} catch (SQLException e) {System.out.println("轉(zhuǎn)賬失敗,事務回滾!");try {conn.rollback();} catch (SQLException e1) {e1.printStackTrace();}e.printStackTrace();}finally {try {ps4.close();ps3.close();ps2.close();ps1.close();conn.close();} catch (SQLException e) {e.printStackTrace();}}} }

三、測試類TestTransaction.java

import java.util.Scanner;import cn.yanchengdai.dao.BankBusiness;public class TestTransaction {public static void main(String[] args) {Scanner in = new Scanner(System.in);System.out.println("請輸入轉(zhuǎn)賬金額:");int transfer = in.nextInt();System.out.println("銀行正在轉(zhuǎn)賬中,請稍后。。。");new BankBusiness().testTrans(transfer);}}

四、測試結(jié)果

當轉(zhuǎn)賬20000時,余額=0,違反了檢查約束,事務回滾,兩張表中數(shù)據(jù)不變:

當轉(zhuǎn)賬9000時,顯示轉(zhuǎn)賬成功。

轉(zhuǎn)賬記錄:

余額表:

總結(jié)

以上是生活随笔為你收集整理的jdbc处理银行转账事务的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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