存储过程执行for update与java执行for update并发问题 50

jdk1.5与oracle11g现象为大批量数据同时调用java方法与数据库中存储过程,会出现生成的号重复,测试案例为:1、三个线程每个线程循环2000次同时在UAT数据... jdk1.5与oracle11g
现象为 大批量数据同时调用java方法与数据库中存储过程,会出现生成的号重复,测试案例为:
1、三个线程每个线程循环2000次同时在UAT数据库中调用Lis_CreatePrtNo存储过程生成保单号,并将保单号写入临时表,未发生重号现象;2、三个线程每个线程循环2000次同时在java类中调用核心生成保单号方法,并将保单号写入临时表中,未发生重号现象;3、两个线程每个线程循环2000次同时java类中启用一个线程循环2000次调用核心生成保单号方法,发生重号现象。4、利用断点调试,在java中调用核心生成保单号方法,在执行for update sql后暂停,同时在plsql中调用Lis_CreatePrtNo存储过程,在执行对同一行for update时出现等待现象,当java中执行Connection.commit后存储过程中才成功执行for update,且查出来的最大号码为+1处理后的最大号码。5、利用断点调试,当存储过程执行for update后暂停,在java中调用for update语句时出现等待现象,在plsql中执行将最大号码+1处理并commit,java执行for update成功并得到+1后的结果。

希望高人能帮忙解决或指出问题原因。
多年来一直都是java自己去调用生成的,只是最近业务拓展需要,所以增加了存储过程。
展开
 我来答
随缘0BB
2014-09-11 · 超过27用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:24万
展开全部
你写的太多了! 我真的看不下去了! 哈哈
你是不是要保证高并发唯一?然后有序递增? 如果要是这样的话 “我一般的解决方案是只能JAVA 程序写 然后JAVA 同步锁” 这样就可以了! 但是只限于单台server 非集群

还有方法就是 写一个单号的池! 效率更高!比加锁要好!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式