【问题标题】:Operation not allowed after ResultSet closed (JSP)ResultSet 关闭后不允许操作(JSP)
【发布时间】:2016-05-01 09:20:03
【问题描述】:

这段代码给我的错误是结果集关闭后无法执行操作。我不明白出了什么问题。提前致谢。

<%@page import="java.sql.*"%>
<%
  String username = request.getParameter("username");
  String password = request.getParameter("password");

    //JDBC CODE
  try{
     Class.forName("com.mysql.jdbc.Driver");
      Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/**", "****", "******");
    Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    ResultSet rs = stmt.executeQuery("select * from add_user_table where name='"+username+"' and password='"+password+"'");
    if(rs.next())
    {
      String name=rs.getString("name");
      String pass = rs.getString("password");
      if(username.equals(name) && password.equals(pass))
      {
         session.setAttribute("username",username);
         response.sendRedirect("any.jsp");
      }
      else
      {
        response.sendRedirect"any2.jsp?msg=Invalid");
      }
    }
  else
  {
      response.sendRedirect("any2.jsp?msg=Invalid");
  }
}
catch(Exception e)
{
    e.printStackTrace();
}
%>

【问题讨论】:

  • 嗯,我不认为编写具有明显 SQL 注入风险的代码是一个好习惯。
  • 需要堆栈跟踪。为什么要同时检查 SQL 和以下 Jaca 代码中的匹配项?
  • 据我所知,显示的代码不会产生此错误。请发布堆栈跟踪。

标签: java jsp jdbc


【解决方案1】:

我认为这是因为您使用的 if(rs.next) 只会检查一个实例,这可能就是您收到 ResultSet 关闭错误的原因。将其更改为 while(rs.next) 以扫描每一个。

附带说明一下,我会在您的 JSP 页面中避免使用 Scriplets,而是选择使用 JSTL(Java 服务器页面标记库)和 EL(表达式语言)代码来引用任何 servlet 数据,这将更加整洁和遵循 MVC 类型架构。

【讨论】:

  • 这怎么可能是真的?将if 更改为while 怎么可能解决ResultSet closed 错误?这个答案甚至没有意义。
  • 我很惊讶一个拥有如此高声誉和知识的人会以这样的方式做出回应,却没有提供手头实际问题的替代方案。您清楚地认为对我的回答投反对票是谨慎的做法,我对此没有任何问题,但正如您从我的声誉中看到的那样,我才刚刚开始,并希望得到任何建议,这将使我能够像您一样学习。
猜你喜欢
  • 2012-06-11
  • 2017-04-17
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多