世界聚焦于你
2017-06-15 02:27
采纳率: 100%
浏览 1.4k
已结题

编程模拟ATM机转账时,一个账户扣钱,另一个账户加钱,中间出现中断怎么办,求大神解答

我们老师让用JAVA编程一个ATM机模拟系统,并连接数据库。代码已编写完成,连接ACCESS数据库,但老师说转账时有一个问题没考虑,我编写的转账操作是,一旦接收到文本框里的钱数,就执行扣除此账户的钱数,下一条语句是增加待转账账户的钱数。两条语句,编写在一起,依次顺序执行,但是如果第一条语句执行过之后,系统突然出现崩溃,退出等一些情况,第二条语句就没来得及执行。那么第一条语句把账户的钱扣了,对方账户又没收到。这个情况怎么解决,求大神告诉思路,剩下的变成我自己能解决。(曾经想过在数据库再添加一栏待转账金额,第一条语句先把待转账钱数存到这里,再依次执行那两条语句,如果整个过程顺利,最后把那一栏清零,那么问题又来了,如果中间发生中断,如何判断,余额那一栏里的钱是执行过扣款操作,还是没执行过。等等一系列问题)

  • 点赞
  • 收藏

9条回答 默认 最新

  • wjwisme 2017-06-15 02:42
    已采纳

    你说的这个过程在编程中被称为事务,也就是赚钱扣钱是一个整体,要么都做,要么不做,如果扣钱过程中出现异常,回滚,回到没扣钱状态

    点赞 评论
  • WlExop 2017-06-15 02:34

    写一个扣钱的方法,一个加钱的方法,在写一个操作的方法,在操作的方法中执行扣钱和加钱的方法,当操作方法成功执行后提交数据库

    点赞 评论
  • Cool_yabo 2017-06-15 02:39

    一般来说系统不是这么容易崩溃的,一般都是存在一个中间表,当初想出错了,可以查询中间表,看是手动退款还是继续进行转账

    点赞 评论
  • GoBiOlderWang 2017-06-15 02:46

    这种情况需要添加事物,事物的作用就是能够使内部所有的方法同时成功或者同时失败,你可以将加钱和减钱的两个方法放在一个service层的方法中,
    再给这个方法添加事物管理,这样就ok了

    点赞 评论
  • 庄粟 2017-06-15 03:06

    不用想这么麻烦,数据库都是支持事物的
    http://blog.csdn.net/lijizh1013/article/details/7964992

    点赞 评论
  • 南宫文凯 2017-06-15 03:11

    过程在编程中被称为事务,
    满足四个特性
    1.原子性 2.一致性 3.隔离性 4.持久性
    ,如果过程中出现异常,回滚,回到事发状态
    你这里需要手动管理事物。、
    一下conn代表connection
    try{
    conn.setAutoCommit(false)//不自动提交事务
    (//你的代码)
    conn.commit//提交事务
    }catch(//错误捕捉){
    conn.rollback//回滚
    }
    如上述方法,当你的程序出错就不会对数据库出现操作(至于过程的特性需要你查并且记下来)

    点赞 评论
  • Ch11w 2017-06-15 03:59

    是不是没用commit提交啊

    点赞 评论
  • 古之名123 2017-06-15 06:02

    核心: 事物的 提交 或者 回滚
    事物的概念:1.原子性 2.一致性 3.隔离性 4.持久性

    点赞 评论
  • cndx007 2017-06-15 07:45

    最简单的是数据库事物,但是真正的转账不是A到B那么简单,实际这两步是可以分开的

    点赞 评论

相关推荐 更多相似问题