【问题标题】:ResultSet returns nothingResultSet 不返回任何内容
【发布时间】:2017-04-27 16:01:00
【问题描述】:

我对 servlet 的输出有疑问。似乎它什么也没输出。我使用的是 Apache Tomcat 8.0.43。它不返回任何异常。任何帮助将不胜感激。 这是我的 html 文件中的表单。

<form action="servlet1" method="POST">
<p>Email<br>
  <input type="text" name="email" required>
</p>
<p>Password<br>
  <input type="text" name="password" required>
</p>
<p><input type="submit"></p>
</form>

这是 servlet1,它处理输入并分派到另一个 servlet(servlet2) 以检查数据库中是否存在以下输入。

@Override
public void doPost(HttpServletRequest request, HttpServletResponse response)  
    throws ServletException, IOException {  

    response.setContentType("text/html");  
    PrintWriter out = response.getWriter();  

    String email = request.getParameter("email");  
    String password = request.getParameter("password");  

    if (Login.validate(email, password)) {  
        RequestDispatcher rd = request.getRequestDispatcher("servlet2");  
        rd.forward(request,response);  
    }  
    else {  
        out.print("Sorry username or password error");  
        RequestDispatcher rd = request.getRequestDispatcher("index.html");  
        rd.include(request,response);  
    }           
    out.close();  
}

然后我得到了这个登录类,它有一个检查用户是否存在于数据库中的方法。我认为这就是问题所在。

public static boolean validate(String email,String password){  
    boolean status=false;  
    try {  
        Class.forName("com.mysql.jdbc.Driver");
        String conStr = "jdbc:mysql://localhost:3306/virtuoso?user=root&password=";
        Connection con = DriverManager.getConnection(conStr); 

        String sql = "SELECT * FROM tutor WHERE email=? and password=?";
        PreparedStatement ps = con.prepareStatement(sql);  
        ps.setString(1,email);  
        ps.setString(2,password);  

        ResultSet rs = ps.executeQuery();  
        status = rs.next();  
    } catch (ClassNotFoundException | SQLException e) {
        //empty
    }  
    return status;  
}

【问题讨论】:

  • 不要默默吞下异常。因此,您无法判断错误是什么。
  • servlet2 文件中写了什么?

标签: java mysql servlets


【解决方案1】:

使用 try catch 并知道异常。没有它,您将不会知道问题所在。

try{

.

.

} catch (Exception e) {
        e.printStackTrace();
}

【讨论】:

  • 这篇文章没有回答问题,而 OP 询问 "ResultSet 返回什么" 这应该是评论。
【解决方案2】:

当它低于最后一行时,ResultSet next 可能会返回false。请参阅link。它取决于 jdbc 驱动程序供应商是否返回 false 或异常。请检查您的驱动程序供应商规格。

【讨论】:

  • 这不是真的。 A ResultSet cursor is initially positioned before the first row; the first call to the method next makes the first row the current row; the second call makes the second row the current row, and so on.
猜你喜欢
  • 2020-04-27
  • 2019-04-06
  • 2012-02-15
  • 2020-09-07
  • 2021-11-22
  • 2015-11-06
  • 2013-11-14
  • 2014-03-23
  • 2012-08-25
相关资源
最近更新 更多