使用JDBC串連MySQL資料庫--典型案例分析(六)----實現賬戶轉賬操作

來源:互聯網
上載者:User

標籤:myeclipse   mysql   jdbc   java   資料庫   

轉載請註明:http://blog.csdn.net/uniquewonderq


問題:使用JDBC串連資料庫,實現帳號轉賬業務。從A賬戶轉賬為B賬戶500元


方案:

本案例中,要實現轉賬業務,需要執行兩次更新操作,一是更新A賬戶的金額為在原有的金額基礎上減去500元;

二是更新B賬戶的金額為在原有金額的基礎上增加500元。這兩次更新操作要麼全部成功,要麼全部失敗(事務),來表示轉賬的成功或失敗。如果A賬戶的金額更新為原來金額基礎上減去500元,而B賬戶去沒有在原有金額基礎上增加500元,這樣就造成了資料的不一致。我們可以使用事務來控制兩次更新要麼全部成功,要麼全部失敗。

本案例中,可以可以使用事務將兩次更新操作封裝成一個邏輯但願,要麼全部執行,要麼完全不執行, 保證了資料的完整性。

下列方法實現JDBC事務的基本操作;

Connection.setAutoCommit(boolean)當參數為false時,關閉自動認可

Connection.commit()提交事務

Connection.rollback()復原事務

使用JDBC控制事務的核心代碼如下:

try {con=ConnectionSource.getConnection();stmt=con.createStatement();//更新資料的SQL語句String sql1="update account set amount=amount-"+amount+"where id="+"'"+from+"'";String sql2="update account set amount=amount+"+amount+"where id="+"'"+to+"'";//關閉自動認可con.setAutoCommit(false);//執行SQL語句stmt.executeUpdate(sql1);stmt.executeUpdate(sql2);//提交con.commit();} catch (SQLException e) {try {con.rollback();} catch (SQLException e1) {System.out.println("復原事務異常!");throw new RuntimeException(e);}System.out.println("資料庫訪問異常!");throw new RuntimeException(e);}finally{try {if(stmt!=null){stmt.close();}if(con!=null){con.close();}} catch (SQLException e) {System.out.println("釋放資源時發生異常!");}}

步驟:

實現此方案需要按照如下步驟進行:

步驟一:建立Account表,並插入測試資料

在Mysql資料庫中,建立表並插入測試資料,SQL語句如下所示:

CREATE TABLE account(id CHAR(1),amount NUMERIC(10,2));INSERT INTO account VALUES('A',1000);INSERT INTO account VALUES('B',2000);

步驟二:準備JDBC操作資料庫的基本代碼

首先,建立類Trans,在該類中建立transfer方法,方法的聲明如下:

public void transfer(String from,String to, double amount){}

  該方法表示從莊戶from轉賬給賬戶to,轉賬金額為amount。

然後,準備資料庫連接Connection對象,操作SQL語句的Statement對象並進行異常處理,代碼如下所示:

package Account;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import dao.ConnectionSource;public class Trans {public static void main(String[] args) {}public void transfer(String from,String to,double amount){Connection con=null;Statement stmt=null;try {con=ConnectionSource.getConnection();stmt=con.createStatement();} catch (SQLException e) {System.out.println("資料庫訪問異常!");throw new RuntimeException(e);}finally{try {if(stmt!=null){stmt.close();}if(con!=null){con.close();}} catch (SQLException e) {System.out.println("釋放資源時發生異常!");}}}}

步驟三:實現轉賬功能

使用Connection的setAutoCommit方法,commit方法以及rollback方法來控制事務,以確保轉賬功能正確實現,代碼如下所示:

package Account;import java.sql.Connection;import java.sql.SQLException;import java.sql.Statement;import dao.ConnectionSource;public class Trans {public static void main(String[] args) {}public void transfer(String from,String to,double amount){Connection con=null;Statement stmt=null;try {con=ConnectionSource.getConnection();stmt=con.createStatement();//更新資料的SQL語句String sql1="update account set amount=amount-"+amount+"where id="+"'"+from+"'";String sql2="update account set amount=amount+"+amount+"where id="+"'"+to+"'";//關閉自動認可con.setAutoCommit(false);//執行SQL語句stmt.executeUpdate(sql1);stmt.executeUpdate(sql2);//提交con.commit();} catch (SQLException e) {try {con.rollback();} catch (SQLException e1) {System.out.println("復原事務異常!");throw new RuntimeException(e);}System.out.println("資料庫訪問異常!");throw new RuntimeException(e);}finally{try {if(stmt!=null){stmt.close();}if(con!=null){con.close();}} catch (SQLException e) {System.out.println("釋放資源時發生異常!");}}}}

步驟四:測試

在Trans類的main方法中,笤俑transfer方法,代碼如下所示:

public static void main(String[] args) {Trans trans=new Trans();trans.transfer("A", "B", 500);}
運行Trans類,控制台無輸出,表示成功,然後查看Mysql資料庫中的account表,會發現A賬戶的金額減少了500元,B賬戶的金額增加了500元。

運行前:

運行後:


本節結束~  

下次,繼續,請持續關注哦~



















使用JDBC串連MySQL資料庫--典型案例分析(六)----實現賬戶轉賬操作

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.