【问题标题】:ResultSet is not receiving Data结果集未接收数据
【发布时间】:2018-03-09 03:01:59
【问题描述】:

我试图验证我通过html从用户那里收到的用户名和密码,但是我的结果集没有收到任何数据,请检查我的sql查询并纠正我,谢谢

 String vuname=response.getParameter("username");
   String vpswd=response.getParameter("password");
        String vsql="select * from login where username = '" + vuname + "' and password = '" + vpswd + "'";
        System.out.println("----sql-----"+vsql);
        ResultSet rs = stmt.executeQuery(vsql); 

        out.println("This is result set "+check);
        if(!rs.next())
        {
            System.out.println("-----Failure------");
        }
        else
        {
            System.out.println("-----Success------");
            rd.forward(request,response);
        }
        }
        catch(Exception e)
        {}
    }

  }

【问题讨论】:

  • 检查您是否从 getParameter() 获得所需的值。
  • 不相关,但是:您应该将输入连接到这样的 SQL 查询中。请learn how to usePreparedStatement
  • 不要将值连接到查询字符串中。这是不安全的,并且会使您的代码容易受到 SQL 注入的影响。此外,不要以纯文本形式存储密码。无论如何,如果没有minimal reproducible example,我们只能假设您尝试的用户/密码组合与表中的数据不匹配。

标签: java sql jdbc resultset


【解决方案1】:

来自documentation

ResultSet 游标最初位于第一行之前

所以只需从您的代码中删除接下来的两行,因为您尝试访问不存在的数据。

    String check = rs.getString(1);/*i tried to check if my result set has any values*/
    String check1=rs.getString(2);

也许您需要添加 rs.previous() 以将 ResultSet 移动到第一行之前的初始位置。

【讨论】:

  • rs.previous() 仅适用于可滚动的结果集。默认为只进。
猜你喜欢
  • 2018-04-27
  • 1970-01-01
  • 1970-01-01
  • 2013-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 2012-06-03
相关资源
最近更新 更多