关于servlet获取请求 但是执行两次sql访问的bug

1 在项目中,客户调用接口 发送两次请求,但是参数不一样 依次放松 数据访问应该依次运行,但是 sql语句却并行执行的问题

在程序中 我也做了唯一校验,即数据库中有相同记录,就执行更新操作 而不是执行插入操作。但是这次似乎插入的时候 就直接插入了两条。

在后台日志中 正确的应该是这样的:
获取每个请求,及对应的值:i.ebelter.com
获取每个请求,及对应的值:42.121.59.208
获取每个请求,及对应的值:42.121.59.208
获取每个请求,及对应的值:close
showAdvice=true
showResult=true
count:68
获取userId的用户信息:sql检验sql的执行次数:SELECT USER_NAME,SEX,AGE,HEIGHT,WEIGHT,PROFESSION,REGION,SERIALNUMBER,DISEASEHISTORY FROM `belter_userinfo` t WHERE t.`USER_ID`='1754188'
获取每个请求,及对应的值:i.ebelter.com
获取每个请求,及对应的值:42.121.104.92
获取每个请求,及对应的值:42.121.104.92
获取每个请求,及对应的值:close
showAdvice=false
showResult=false
count:69
获取userId的用户信息:sql检验sql的执行次数:SELECT USER_NAME,SEX,AGE,HEIGHT,WEIGHT,PROFESSION,REGION,SERIALNUMBER,DISEASEHISTORY FROM `belter_userinfo` t WHERE t.`USER_ID`='1754188'
search_sql:select count(id) from belter_weight where USER_ID='1754188' and TEST_DATE='2013-03-14 12:37:17' limit 1
res:0
insert+search_sql:insert into belter_weight (USER_ID, WEIGHT, HEIGHT,SHAREID,TEST_DATE) values('1754188', 69.199997, 170.000000, '0','2013-03-14 12:37:17')
search_sql:select count(id) from belter_weight where USER_ID='1754188' and TEST_DATE='2013-03-14 12:37:17' limit 1
res:0
insert+search_sql:insert into belter_weight (USER_ID, WEIGHT, HEIGHT,SHAREID,TEST_DATE) values('1754188', 69.199997, 170.000000, '0','2013-03-14 12:37:17')
SELECT USER_NAME,SEX,AGE,HEIGHT FROM belter_userinfo WHERE USER_ID='1754188'
sex: 0weight: 69.2height: 170.0score:90.0

而有时候确实这样的
获取每个请求,及对应的值:i.ebelter.com
获取每个请求,及对应的值:42.121.59.208
获取每个请求,及对应的值:42.121.59.208
获取每个请求,及对应的值:close
showAdvice=true
showResult=true
showAdvice=false
showResult=false
获取userId的用户信息:sql检验sql的执行次数:SELECT USER_NAME,SEX,AGE,HEIGHT,WEIGHT,PROFESSION,REGION,SERIALNUMBER,DISEASEHISTORY FROM `belter_userinfo` t WHERE t.`USER_ID`='1754188'
res:0
insert+search_sql:insert into belter_weight (USER_ID, WEIGHT, HEIGHT,SHAREID,TEST_DATE) values('1754188', 69.199997, 170.000000, '0','2013-03-14 12:37:17')
res:0
insert+search_sql:insert into belter_weight (USER_ID, WEIGHT, HEIGHT,SHAREID,TEST_DATE) values('1754188', 69.199997, 170.000000, '0','2013-03-14 12:37:17')

这种问题 是服务器端问题 还是客户端问题了。

发现在第一次插入后,res没有及时更新 。

这个问题 最终被我解决了 开始认为是并发问题 所谓并发是不同的线程干同一件事情或者是同时操作一个对象等等 但是这里不是 只是;两个请求
这两个请求 只有两个参数不同 第一个请求发了后 其中的一个参数是showAdvice是true,这个变量设置为成员变量,第二个请求中 showAdvice是false,这样第一个请求中的参数值就变为false 按照程序逻辑 执行了两次插入操作。

之后修改为 将成员变量showAdvice 设置为方法内部的临时变量,作用域就仅仅在此方法内,使得第二次请求无法修改第一次请求的showAdvice变量
这样就解决了问题

开始的时候我想 第二次请求发来的时候 第一次请求就结束了 这次看来似乎没有那么快,本地测试是好的,在服务器上就不行,通过打印日志记录,才分析出这些问题。前段时间接手这个bug的时候 总认为解决了这个 自己肯定逆天 小小的得意一把 。有点忘性 哈哈 兴奋中
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值