java中执行delete,insert被重复执行

得到了一条数据,我现在正常的操作是要先删后增,正常的情况下会执行delete然后insert操作,但是偶尔会delete,delete,insert,insert这样执行条重复的操作,最后导致insert了条重复的,这是偶尔发生的,一条天概4000条数据会有那么2条左右有这种情况,不是前端提交了2次这种情况,问题和这位大哥的一样https://bbs.csdn.net/topics/360209410?list=lz,有遇到过的大哥给个思路

//删除应缴信息
                                        sql = "delete t_jj_sfxx where lsh=  '"+map.get("lsh").toString()+kscs+"' and  xmbm=  '"+maps.get("ffsxmbm")+"' and  clbz='F' ";
                                        jdbcDao.execute(sql);

                                        BigDecimal xmgs_sum = new BigDecimal(xmgs[b]); 
                                        BigDecimal xmje_sum = new BigDecimal(xmje[b]);  
                                        BigDecimal hj_sum = xmgs_sum.multiply(xmje_sum);  
                                        logger.info("获取项目信息---项目数量:"+xmgs_sum+"项目金额:"+xmje_sum+"总金额:"+hj_sum);

                                        sql ="insert into t_jj_sfxx(fid,ysje,hpzl,hphm,sfzh,sjly,lsh,xm,wbywdmsm,ywdwbh,xmbm," +
                                              " xmgs,xmje,clbz,clsj,userid,sflx,jkfs,jkid,kskm,jjxmbm,ywlx,ywyy,czlx,fdwwm,kscs)values  ('"+fids+"','"+xmje[b]+"',''" +
                                                " ,'','"+map.get("zmhm").toString()+"','"+map.get("ywlx").toString()+"'," +
                                                "'"+map.get("lsh").toString()+kscs+"','"+map.get("xm").toString()+"','"+map.get("sfmc").toString()+"'," +
                                                "'"+map.get("glbm").toString()+"','"+maps.get("ffsxmbm")+"',   '"+xmgs[b]+"'," +
                                                " '"+hj_sum+"','F',TO_CHAR(SYSDATE,'yyyy-mm-dd'),'"+user.getUserid()+"','"+inmap.get("sflx")+"','"+user.getJkfs()+"','"+inmap.get("ywlx")+"','"+kskm+"','"+str[b]+"','"+map.get("ywlx").toString()+"','"+map.get("ywyy").toString()+"','"+user.getCzlx()+"','"+user.getDwbm()+"','"+kscs+"')";

                                        jdbcDao.execute(sql);

就是这段代码,大部分情况是delete后insert,但有极少数发生delete delete insert insert,就是那个删除连续运行2次后,插入跟着连续运行了2次

异常日志:图片说明

正常日志:图片说明

weixin_40694508
小虾米闯江湖 谢谢各位,用了你们的方法试了,只看实际情况怎么样
10 个月之前 回复

3个回答

首先,不是很明白你这个问题的背景哈,从你说的来看,是不是你现在有一条数据插入重复的情况?这种类似的防重问题,解决办法有很多种:
1、在插入前,基于这条数据的唯一标识做一个锁(分布式场景,可能要做分布式锁)。每次插入前,都来判断下,是否被处理过。
2、在db中对唯一列建唯一索引。
回答的不一定对,仅供参考。

weixin_40694508
小虾米闯江湖 大哥,我又更新了一下,能帮我分析下吗?
10 个月之前 回复
u012737673
明教一百零八代觉主 回复小虾米闯江湖: 那这个异常的场景,可能是代码逻辑的问题啊,得检查下你的处理逻辑了。
10 个月之前 回复
weixin_40694508
小虾米闯江湖 就是不能做唯一标识,允许能插入重复的,但是是要正常的插入重复的,不能是这种异常的插入
10 个月之前 回复

如果代码流程没有错误,还是应该排查下是不是按钮重复响应导致的请求重复处理。
在请求中加一行调试日志:打印调用者线程名称+时间,页面上提交代码处也加上日志。

weixin_40694508
小虾米闯江湖 我就是在日志里分析发现这种情况的,我发了日志片段和代码片段,大哥你看下你有遇到过没
10 个月之前 回复

代码是单线程执行下去的,连续打印两次,说明同时有两条线程执行,说明发了两个请求,要确认这个,可以在打印时加上线程名称。要防止重复提交,一种可以是页面限制,限制提交按钮必须等上一次提交响应后才能再继续操作,另一个种是服务端限制,这个可以使用一次性的随机标识号来限制

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问

相似问题

2
qt的内存泄漏问题(qt中的new和delete操作)
2
Java中,为什么当File为目录时,file.isDirectory()会返回false
3
SQL 事务 有时执行不对,也没有报错
7
Java 中注入失败,初始化失败
3
微信小程序DELETE传参的问题
3
每次都自动执行到master数据库,能默认执行到我创建的数据库吗,
4
Java中加入登陆拦截器后,post put delete请求全部405,只有get请求可以访问。请问应该怎么解决?
1
sparkSql使用insert、create table tablename as select 。。。会报一个错,查了很久都没有查到原因。
3
为什么我在Dev C++编译器上执行以下代码时会出错(初学者菜鸟问题)
3
Java关于List<Map<String,Object>>增删改查问题
2
spring整合rabbitmq报错ListenerContainerFactoryBean初始化失败
1
java接口参数与方法返回类型是接口。
4
使用java创建文件到本地,创建后立即删除失败
1
利用INSERT、UPDATA和DELETE命令可以同时对多个表进行操作码?
1
spark sql如何执行delete
3
java.io.StreamCorruptedException: invalid stream header: 77327070是什么情况如何解决?
4
java.lang.StringIndexOutOfBoundsException报错的原因?
1
微信JSSDK图像接口调用,从缓存中获取到的 localId,wx.getLocalImgData 为什么不能执行?
6
spring boot 里,对多个表都有增删改操作,对应多个控制器,但不每个单独建方法 ADD MODIFY DELETE方法
2
springboot整合hibernate 运行时重复报错对象名 'SPRING_SESSION' 无效?