充值问题求解决方案
一张可以消费的卡需要先充值再消费
充值的时候记录数据库同时往卡里写数据
两件事必须同时成功 或者同时失败
那么应该怎么保证同时成功或者同时失败
现在的流程是
开事物写数据库->写卡->提交事务
这个办法这样存在一个隐患问题 写卡成功事物没有提交
求大神告诉我改怎么处理
dd不知道 . 贴上代码 ibcadmin 发表于 2016-8-22 09:41
. 贴上代码
我想要的是流程思路
一张IC卡需要写数据并记录数据库
IC卡不能撤销之前写入的数据
数据库可以撤销之前写入的数据
怎么保证写卡 写数据库同时失败或者同时成功
数据库是在服务器的 写入的数据库的指令是通过socket发送到服务器的
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了,到这一步就是两个都成功了
.. 等等 我刚说的好像不对。。我才看到IC卡不能撤销写入的数据是吧.......
那就这样把上面的第二步和第三步掉换个位置
1.有两个标志属性bool, (写IC卡是否成功 bool 写数据库是否成功 bool )
2.先socket方式写数据库,写入成功后bool为true, 如果为false也就没有后面的事了。
3.数据库bool为true后,写IC卡,返回成功或失败,更新bool值,如果是false,删除之前写入数据库的数据
4.此时应该全为true了,到这一步就是两个都成功了
ibcadmin 发表于 2016-8-24 09:46
.. 等等 我刚说的好像不对。。我才看到IC卡不能撤销写入的数据是吧.......
那就这样把上面的第二步和 ...
2个新问题
1.还有删除数据怎么保证是刚插入的数据
例如2个人同时写2张卡都插入数据了
都写卡失败 需要删除数据
※2.那删除数据失败怎么办? Mastrcn 发表于 2016-8-25 13:00
2个新问题
1.还有删除数据怎么保证是刚插入的数据
..........
1.两个人同时写入两个卡这个2个人的ID是不一样的写入时间取最新的 就知道是哪个数据了
2.删除失败这个你之前的问题相当于你的异常了 删除的操作相当于异常处理了,如果在异常处理中不能保证能处理成功的话就要人工干预了 那流程是不是应该这样
try{
充值;
}
catch{
try{
充值失败处理;
}
catch{
充值失败处理失败记录写入文件;
}
}
页:
[1]