Mastrcn 发表于 2016-8-17 21:11:12

充值问题求解决方案


一张可以消费的卡需要先充值再消费
充值的时候记录数据库同时往卡里写数据
两件事必须同时成功 或者同时失败
那么应该怎么保证同时成功或者同时失败
现在的流程是
开事物写数据库->写卡->提交事务
这个办法这样存在一个隐患问题 写卡成功事物没有提交
求大神告诉我改怎么处理

Amy尾巴 发表于 2016-8-18 08:57:14

dd不知道

ibcadmin 发表于 2016-8-22 09:41:13

.   贴上代码

Mastrcn 发表于 2016-8-23 19:30:58

ibcadmin 发表于 2016-8-22 09:41
.   贴上代码

我想要的是流程思路

一张IC卡需要写数据并记录数据库
IC卡不能撤销之前写入的数据
数据库可以撤销之前写入的数据
怎么保证写卡 写数据库同时失败或者同时成功

数据库是在服务器的 写入的数据库的指令是通过socket发送到服务器的

ibcadmin 发表于 2016-8-24 09:40:56

Mastrcn 发表于 2016-8-23 19:30
我想要的是流程思路

一张IC卡需要写数据并记录数据库


明白了,
因为两个是分开的,所以事务肯定是不行了, 那就可以这样,
1.有两个标志属性bool, (写IC卡是否成功 bool   写数据库是否成功 bool )
2.先写入IC卡,写入成功后,bool为true, 如果为false也就没有后面的事了。
3.IC卡bool为true后,socket方式写数据库,返回成功或失败,更新bool值,如果是false,删除写入IC卡的数据。
3.此时应该全为true了,到这一步就是两个都成功了

ibcadmin 发表于 2016-8-24 09:46:37

.. 等等 我刚说的好像不对。。我才看到IC卡不能撤销写入的数据是吧.......
那就这样把上面的第二步和第三步掉换个位置

1.有两个标志属性bool, (写IC卡是否成功 bool   写数据库是否成功 bool )
2.先socket方式写数据库,写入成功后bool为true, 如果为false也就没有后面的事了。
3.数据库bool为true后,写IC卡,返回成功或失败,更新bool值,如果是false,删除之前写入数据库的数据
4.此时应该全为true了,到这一步就是两个都成功了

Mastrcn 发表于 2016-8-25 13:00:18

ibcadmin 发表于 2016-8-24 09:46
.. 等等 我刚说的好像不对。。我才看到IC卡不能撤销写入的数据是吧.......
那就这样把上面的第二步和 ...

2个新问题

1.还有删除数据怎么保证是刚插入的数据
例如2个人同时写2张卡都插入数据了
都写卡失败 需要删除数据

※2.那删除数据失败怎么办?

ibcadmin 发表于 2016-8-25 13:48:51

Mastrcn 发表于 2016-8-25 13:00
2个新问题

1.还有删除数据怎么保证是刚插入的数据


..........
1.两个人同时写入两个卡这个2个人的ID是不一样的写入时间取最新的 就知道是哪个数据了
2.删除失败这个你之前的问题相当于你的异常了 删除的操作相当于异常处理了,如果在异常处理中不能保证能处理成功的话就要人工干预了

Mastrcn 发表于 2016-9-9 22:42:31

那流程是不是应该这样
try{
      充值;
}
catch{
        try{
           充值失败处理;
        }
      catch{
          充值失败处理失败记录写入文件;
      }
}
页: [1]
查看完整版本: 充值问题求解决方案