【问题标题】:java jsp if statementjava jsp if语句
【发布时间】:2018-01-21 14:48:56
【问题描述】:

下面的代码让我很头疼。为什么我的if 忽略了rs.next() == true

        System.out.println(rs.next());
        if (rs.next() == true) {
            System.out.println("1");
            session.setAttribute("userid", userid);
            //out.println("welcome " + userid);
            //out.println("<a href='logout.jsp'>Log out</a>");
            response.sendRedirect("success.jsp");
        } else {
            System.out.println("2");
            out.println("Invalid password <a href='index.jsp'>try again</a>");
        }

控制台:

#1 SELECT * FROM users where username = 'test' and password = 'test'

#2 true

#3 2

我在这里做错了什么?

【问题讨论】:

    标签: java jsp tomcat jdbc resultset


    【解决方案1】:

    我在这里做错了什么?

    您拨打了两次next()。第一个调用返回true,但大概第二个返回false - 如果您的查询只返回一个结果,这是有道理的。

    如果您真的想将值打印出来以进行诊断,请将其保存在局部变量中:

    boolean nextResult = rs.next();
    System.out.println(nextResult);
    if (nextResult) {
        ...
    } else {
        ...
    }
    

    【讨论】:

      【解决方案2】:

      调用ResultSet#next() 会使底层光标前进。假设用户名确实是唯一的,如果找到第一次调用next() 将返回true 并推进光标。当第二次调用时,游标已经用尽了所有数据,所以它返回false。如果你想使用这个值,你需要保留它而不是多次调用next()。例如:

      boolean hasNext = rs.next();
      System.out.println(hasNext);
      if (hasNext) {
          // Do stuff...
      

      【讨论】:

        【解决方案3】:

        我没有完全理解你的问题,但首先我们不应该写这样的 if 语句

        if (rs.next() == true) { 
        

        这样检查的错误做法if(boolVar == true)应该是这样的

        if(boolVar){
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多