1. 程式人生 > >Java模擬銀行轉賬(操作事務)

Java模擬銀行轉賬(操作事務)

第一步:建立一張銀行賬戶表 叫 BankAccount 並建立一個序列

id         number    pk         //使用者id
ano        varchar2(30)  uk     //使用者卡號
apassword  varchar2(30)         //使用者密碼
aname      varchar2(30)         //使用者名稱
amoney     number               //餘額

//建立銀行使用者表
drop table bank_account;
create table    bank_account(
     id    number  constraint   bank_account_id_pk   primary key,
     ano  varchar(30) constraint bank_account_ano_uk  unique,
     apassword  varchar(30), 
     aname   varchar(30),
     amoney  number
);
drop sequence bank_account_id_seq;
create sequence    bank_account_id_seq;
6.2 寫一個java程式  用來開戶   只要輸入 賬號                  密碼     開戶人的姓名   餘額 
開戶資訊如下                           6225880111887788     123456   zhangsan       99999999  
                                      6225880111887799     123456   lisi    9  

第二步:建立Bean包,編寫實體類

public class BankAccount {
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getAno() {
        return ano;
    }
    public void setAno(String ano) {
        this.ano = ano;
    }
    public String getAname() {
        return aname;
    }
    public void setAname(String aname) {
        this.aname = aname;
    }
    public String getApassword() {
        return apassword;
    }
    public void setApassword(String apassword) {
        this.apassword = apassword;
    }
    public String getAmoney() {
        return amoney;
    }
    public void setAmoney(String amoney) {
        this.amoney = amoney;
    }
    @Override
    public String toString() {
        return "BankAccount [id=" + id + ", ano=" + ano + ", aname=" + aname + ", apassword=" + apassword + ", amoney="
                + amoney + "]";
    }
    public BankAccount(String ano, String aname, String apassword, String amoney) {
        super();
        this.ano = ano;
        this.aname = aname;
        this.apassword = apassword;
        this.amoney = amoney;
    }
    public BankAccount(int id, String ano, String aname, String apassword, String amoney) {
        super();
        this.id = id;
        this.ano = ano;
        this.aname = aname;
        this.apassword = apassword;
        this.amoney = amoney;
    }
    public BankAccount() {
        super();
        // TODO Auto-generated constructor stub
    }
    private int id;
    private String ano;
    private String aname;
    private String apassword;
    private String amoney;
}

第三步:建立賬號,編寫開戶程式

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
import com.xdl.util.JdbcUtil2;

public class CreateBankAccount {
    public static void main(String[] args) {
         Scanner  sc = new Scanner(System.in);
         System.out.println("請輸入開戶的卡號:");
         String  ano = sc.nextLine();
         System.out.println("請輸入開戶的名字:");
         String  aname = sc.nextLine();
         System.out.println("請輸入開戶的密碼:");
         String  apassword = sc.nextLine();
         System.out.println("請輸入開戶的錢數:");
         String  smoney = sc.nextLine();
         //double  amoney = Double.parseDouble(smoney);
         // 把輸入的資料 包裝成物件  
         BankAccount  ba = new BankAccount(ano, aname, apassword, smoney);
         Connection  conn = null;
         PreparedStatement  ps = null;
         conn = JdbcUtil2.getConnection();
         String  sql="insert into bank_account values(bank_account_id_seq.nextval,?,?,?,?)";
         try {
            ps = conn.prepareStatement(sql);
            ps.setString(1, ba.getAno());
            ps.setString(2, ba.getApassword());
            ps.setString(3, ba.getAname());
            ps.setDouble(4, Double.parseDouble(ba.getAmoney()));
            int rows = ps.executeUpdate();
            if(rows == 1) {
                System.out.println("開戶成功");
            }else{
                System.out.println("開戶失敗");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            JdbcUtil2.releaseResource(conn, ps, null);
        }
    }
}

第四步:編寫轉賬程式

1、先登入,登入成功才可以執行轉賬程式

2、轉賬邏輯時,連結會自動進行資料的提交,這樣萬一轉入的賬戶不成功,則無法回退之前的操作,為了解決 操作語句 需要同時成功或同事失敗 則需要關閉連線的自動提交

禁止自動提交 conn.setAutoCommit(false);
語句都成功 就提交 conn.commit() ;否則進行回滾 conn.rollback();

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import com.xdl.util.JdbcUtil2;

public class BankAccountTransfer {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("請輸入登入的卡號:");
        String  ano  = sc.nextLine();
        System.out.println("請輸入登入的密碼:");
        String  apassword = sc.nextLine();
        Connection  conn = null;
        PreparedStatement ps = null;
        /* 定義兩個轉賬的  PreparedStatement */
        PreparedStatement from = null;
        PreparedStatement to = null;
        ResultSet  rs = null;
        BankAccount  ba = null;
        conn = JdbcUtil2.getConnection();
        String  sql="select * from bank_account where ano=? and apassword=?";
        try {
            ps=conn.prepareStatement(sql);
            ps.setString(1, ano);
            ps.setString(2, apassword);
            rs = ps.executeQuery();
            if(rs.next()){
                ba = new BankAccount(rs.getInt("id"),
                   rs.getString("ano"), rs.getString("aname"), rs.getString("apassword"),
                   rs.getString("amoney"));
            }
            if(ba!=null){
                System.out.println("登入成功");
                // 從當前賬戶中扣除輸入的金額
                System.out.println("請輸入轉賬的金額:");
                String  smoney=sc.nextLine();
                double  money = Double.parseDouble(smoney);
                sql="update  bank_account set amoney=amoney-? where ano=?";
                // 禁止自動提交  
                conn.setAutoCommit(false);
                from = conn.prepareStatement(sql);
                from.setDouble(1, money);
                from.setString(2, ba.getAno());
                int  fromf=from.executeUpdate();
                // 提示使用者輸入轉入的賬號  和  賬戶名
                System.out.println("請輸入收款的賬號:");
                String  toano = sc.nextLine();
                System.out.println("請輸入收款人姓名:");
                String  toaname= sc.nextLine();
                sql="update  bank_account set amoney=amoney+? where ano=? and aname=?";
                to=conn.prepareStatement(sql);
                to.setDouble(1, money);
                to.setString(2, toano);
                to.setString(3, toaname);
                int tof = to.executeUpdate();
                if(fromf==1 && tof==1){
                    System.out.println("轉賬成功");
                    conn.commit(); //提交
                }else{
                    System.out.println("轉賬失敗");
                    conn.rollback(); //回滾
                }
            }else{
                System.out.println("登入失敗");
            }
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            try {
                conn.rollback();
            } catch (SQLException e1) {
                e1.printStackTrace();
            }
            e.printStackTrace();
        }finally{
            JdbcUtil2.releaseResource(conn, ps, rs);
            JdbcUtil2.releaseResource(conn, from, null);
            JdbcUtil2.releaseResource(conn, to, null);
        }
    }
}

相關推薦

Java模擬銀行轉賬(操作事務)

第一步:建立一張銀行賬戶表 叫 BankAccount 並建立一個序列id number pk //使用者id ano varchar2(30) uk //使用者卡號 apassword varchar2(30)

MySQL資料庫事務例項(模擬銀行轉賬

在資料庫系列文章中[MySQL資料庫事務基本操作](http://blog.csdn.net/fengpojian/article/details/73571983) 介紹了MySQL資料庫基本的事務操作。這篇文章將介紹一個例項來更好的理解學習MySQL資料庫事

Spring通過事務實現模擬銀行轉賬案例

1.  案例結構 2. 所用資料庫表 3. jdbc.properties配置檔案 driver=com.mysql.jdbc.Driver url=jdbc\:mysql\://localhost\:3306/test?characterEncoding\=utf-

java 模擬單鏈表操作

star node next ray datanode lse util class null 節點類 public class ListNode {int data;//數據ListNode next;//指針public ListNode(int x){data=x;}

java模擬銀行存取錢業務

package cunqianTest; /*  * 模擬存錢,取錢  * 如果輸入的數字為正數,則為存錢反之取錢  */ public class Card {private String name;private int money;public Card(String

java模擬銀行賬戶儲存系統

package cn.mdln.study2; /**  * 模擬銀行賬戶儲存系統  * @author Administrator  *  */ public class TestDemo16 {public static void main(String[] args)

JDBC學習筆記(五):模擬銀行轉賬

需求:模擬張三將賬戶中的1000元轉給了李四。 流程: 1.查詢支出方餘額。 2.查詢收款方賬號。3.更新支出方的餘額。 4.更新收款方的餘額。 實現程式碼: public void payDemo(double sum,String payId,String rec

java模擬cookie登陸操作

在使用Java訪問URL時,如果該URL需要身份驗證,那麼就不能夠直接訪問,因為沒有登陸。那麼,如何解決這個問題呢? 方法是使用java模擬登陸,登陸後記錄下cookie資訊,在下次發起請求時時將cookie傳送過去用以表明身份,這樣就能夠訪問帶有許可權的

C#模擬銀行轉賬系統

類庫:BankModel 建立類:Bank using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace BankModel {     pub

Android——簡單模擬銀行轉賬

所謂的簡單模擬銀行轉賬,就是在自己使用一些佈局(目前有三個介面,貌似不堪,用者請見諒,本次只是實現簡單模擬的銀行轉賬業務),這模擬有三個頁面,分別是:轉賬前雙方賬號相關資訊輸入,確認相關資訊頁面以及提示是否轉賬成功(需判斷餘額)。 個人初次看了相關的五大布局以

Android 銀行轉賬事務

package com.example.a22_bank_transfer; import android.database.Cursor; import android.database.SQLException; import android.database.sql

Java總結(隨筆)——代碼總結JDBC以及事務,以銀行轉賬,查賬等為例

模擬銀行系統 數據庫 JDBC 事務 本片文章是對上一篇文章中的事務的例子的功能擴寫,用以加深理解,以及代碼的熟練度:(1)數據庫表數據:(2)引入數據庫連接jar包(3)工具類: package org.jdbc.util; import java.io.File; import java

Jdbc操作事務(提交、回滾)----以銀行轉賬為例

以銀行轉賬為例----Jdbc操作事務(提交、回滾) private Statement statement; private Connection conn; @Test public void test01() throws Exception { Class.forName("c

Jdbc來操作事物 完成模擬銀行轉賬業務

void where ace per use stat zhang ger 正常 創建JDBC工具類 1 package cn.aa4_2.JDBCUtils; 2 3 4 import java.io.FileReader; 5 import

java模擬而一個電話本操作

enum static 全部 ext 電話號碼 .get cep center port 哈哈。大家平時都在使用電話本。以下使用java來模擬而一個簡單的電話本吧... 首先給出聯系人的抽象類 package net.itaem.po; /** * *

java基礎入門-多線程同步淺析-以銀行轉賬為樣例

stat 是什麽 0.11 如何 人員 () 簡單 ret 沒有 在說之前先普及一下線程是什麽? 線程:說白了就是一個任務片段 進程:是一個具有獨立功能的程序關於某個數據集合的一次執行活動。一個進程有一個或者多個線程 線程與進程的本質差別就是有麽有數據

JDBC事務銀行轉賬,貨物進出庫等等。

user close rman back perm 註意 ++ 加載 鏈接 1:轉賬業務  轉賬必須執行2個sql語句(update更新)都成功的情況下,提交事務,如果有一個失敗,則2個都回滾事務2:事務應該具有4個屬性:原子性、一致性、隔離性、持久性。這四個屬性通常稱為A

銀行轉賬失敗到分布式事務:總結與思考

額外 nav 一般來說 以及 不執行 there 上大 區別 信息 目錄 關系型數據庫事務 分布式事務 2PC 3PC TCC 基於消息的分布式事務 1PC 思考與總結 references 正文   思考這個問題的初衷,是有一次給朋友轉賬,結果我的錢被扣

Spring事務銀行轉賬示例

參數 exe 水表 包含 strong 客戶 pub 註入 可能 https://www.imooc.com/video/9331 聲明式事務 撒打算 編程式事務 非模板式(不使用TransactionTemplate)     http://ca

模擬自助取款機操作--java小程式

import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.Scanner; public class Account { public int balance;