JDBC转账

public class TransferTransaction {
    public static Connection connection;

    static{
        try {
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mysqldb","root","root");
            //改成手动提交
            connection.setAutoCommit(false);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws SQLException {

        Scanner scanner = new Scanner(System.in);

        System.out.println("请输入转账人:");
        int from = scanner.nextInt();
        System.out.println("请输入收账人:");
        int to = scanner.nextInt();
        System.out.println("转账金额:");
        double money = scanner.nextDouble();

        Person fromPerson = getPerson(from);

        Person toPerson = getPerson(to);

        try {
            changeBalance(fromPerson, toPerson, money);
        } catch (SQLException e) {
            System.out.println("s");
            connection.rollback();
        }

    }

    public static Person getPerson(int no) throws SQLException {

        QueryRunner queryRunner = new QueryRunner();

        String sql = "select * from person where no = ?";

        Person person = queryRunner.query(connection, sql, new BeanHandler<Person>(Person.class), no);

        return person;

    }

    public static boolean changeBalance(Person fromPerson, Person toPerson, double money) throws SQLException {

        if(fromPerson.getNo() == toPerson.getNo()){
            System.out.println("自己不能给自己转账");
            return false;
        }

        if(fromPerson.getBalance() < money){
            System.out.println("你的余额不够");
            return false;
        }

        //可以转账了
        transAction(fromPerson.getNo(), -money);
        System.out.println(3/0);//模拟事务异常
        transAction(toPerson.getNo(), +money);
        connection.commit();

        return true;

    }

    public static void transAction(int no,double money) throws SQLException {
        QueryRunner queryRunner = new QueryRunner();

        String sql = "update person set balance = balance + ? where no = ?";

        queryRunner.update(connection, sql, money, no);

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值