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的时候 总认为解决了这个 自己肯定逆天 小小的得意一把 。有点忘性 哈哈 兴奋中
分享到:
相关推荐
实际开发中,你需要根据项目需求连接数据库,执行SQL查询或使用ORM框架如Hibernate、MyBatis等。 在Servlet中,请求转发与重定向(Redirect)不同。重定向是客户端行为,浏览器收到服务器的302响应后会发起一个新的...
在Java Web应用程序中,Servlet和JSP是两个关键组件,它们协同工作来处理客户端的请求并展示响应。本文将深入探讨如何在JSP页面中获取Servlet请求中的参数,并将其传递到另一个JSP页面。 首先,我们需要配置`web....
在这个项目中,Servlet将作为后端逻辑的处理层,接收Ajax请求,执行业务操作,然后返回数据。 HTML(HyperText Markup Language)是网页的基础结构语言,而JavaScript则是负责页面动态行为的脚本语言。在本项目中,...
【标题】"jsp+servlet+sql server"是一个典型的Web应用程序开发模式,主要涉及Java服务器页面(JSP)、Servlet以及SQL Server数据库的集成使用。在这样的架构中,JSP用于展示动态内容,Servlet处理业务逻辑,而SQL ...
由于多个线程可能同时访问同一实例,因此必须确保Servlet代码是线程安全的。如果Servlet内部有共享状态(如成员变量),需要采取同步机制,如`synchronized`关键字或使用线程局部变量来避免数据竞争。 2. **Servlet...
【标题】"jsp+servlet+sql server购物车实例"是一个基于Web开发的电子商务应用程序,它展示了如何使用JavaServer Pages(JSP)、Servlet和Microsoft SQL Server数据库来实现一个基本的在线购物车功能。在这个实例中...
本例子将详细介绍如何在Servlet中获取并处理JSON数据。 首先,我们需要引入处理JSON的库,最常用的是Jackson库。在项目中添加Jackson的核心依赖: ```xml <groupId>com.fasterxml.jackson.core</groupId> ...
【学生成绩管理系统 基于Servlet + SQLServer】是一个典型的Web应用程序,它结合了Java Servlet技术与SQLServer数据库,用于高效、安全地管理和维护学生的成绩数据。在本系统中,Servlet作为服务器端的处理程序,...
在Servlet中,我们可以使用预编译的`PreparedStatement`来执行SQL查询并传递参数。这种方式可以有效防止SQL注入攻击,同时提高代码的可读性和可维护性。例如,创建一个带有两个参数(当前页和每页数量)的SQL查询:...
- **执行SQL查询**:使用JDBC连接数据库,执行SQL查询语句获取结果集。 - **处理结果集**:将结果集中的数据转换为Java对象,传递给JSP页面展示。 - **计算总页数**:查询数据库获取总的记录数,根据每页记录数计算...
- 在项目中,JDBC驱动用于建立Java应用与SQL Server的连接,执行SQL查询,并处理结果集。 5. **用户身份验证**: - 登录时,系统会检查输入的用户名和密码是否匹配数据库中的记录。 - 可能使用哈希算法(如MD5或...
- **请求次数**:转发只涉及一次请求,重定向涉及两次请求(首次请求和重定向后的请求)。 - **应用场景**:如果需要携带数据到下一个页面,通常使用转发;如果需要改变访问路径,则使用重定向。 #### 六、Servlet...
4. **处理SQL语句**:使用`java.sql.Statement`或`java.sql.PreparedStatement`对象来执行SQL查询或更新。记得在完成数据库操作后关闭连接,以释放系统资源。 5. **异常处理**:在实际应用中,你需要处理可能抛出的...
在Java Web开发中,Servlet是一种Java编程语言编写的服务器端程序,主要功能是接收和响应来自客户端(通常是浏览器)的请求。在这个主题“十分全的servlet获取表单数据”中,我们将深入探讨如何利用Servlet来处理...
在IT领域,尤其是在Web开发中,`JSP (JavaServer Pages)`、`Servlet`和`JavaBean`是构建动态网站的常用技术栈。本案例主要展示了如何利用这三种技术来实现对MySQL数据库的访问。接下来,我们将深入探讨这些知识点。 ...
在“Servlet实现登录验证”这个主题中,我们将深入探讨如何利用Servlet进行用户身份验证,确保只有合法用户能够访问受保护的资源。 首先,我们需要了解Servlet的基本生命周期。Servlet在首次接收到请求时被实例化,...
【标题】"haha servlet+sql2005" 暗示了这个项目是关于使用Servlet技术与SQL Server 2005数据库进行交互的一个示例或教程。Servlet是Java编程语言中用于开发动态Web应用程序的一种核心组件,而SQL Server 2005是微软...
在本系统中,JAVA主要负责业务逻辑的处理,通过编写Servlet来实现服务器端的交互,Servlet是Java Web应用程序中的一个组件,它可以接收和响应来自客户端的HTTP请求,执行相应的业务操作,并返回结果给客户端。...
例如,一个常见的应用场景是用户通过Web表单提交数据,Servlet接收到请求后,使用SQL Server驱动连接到数据库,执行相应的SQL语句(如INSERT、UPDATE或SELECT),然后将结果返回给用户或者更新到数据库中。...
本篇文章主要探讨如何在Servlet中处理AJAX POST请求,特别是当请求参数以`form data`和`request payload`两种不同形式传递时。 首先,理解HTTP请求的基本结构。GET请求的参数通常附加在URL后面,而POST请求的参数...