Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Servlets 检查数据库中的重复用户名_Servlets - Fatal编程技术网

Servlets 检查数据库中的重复用户名

Servlets 检查数据库中的重复用户名,servlets,Servlets,我有这个Servlet代码,我试图在数据库中检查重复的用户名,但它似乎不起作用 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out

我有这个Servlet代码,我试图在数据库中检查重复的用户名,但它似乎不起作用

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();

    String username = request.getParameter("username");
    String password = request.getParameter("password");
    String confirmpassword = request.getParameter("confirm_password");

    try {
        Class.forName("com.mysql.jdbc.Driver");
        String url = "jdbc:mysql://localhost:3306/account";
        Connection conn = DriverManager.getConnection(url, "root", "school");

        Statement statement = (Statement) conn.createStatement();
        ResultSet rs = statement.executeQuery("SELECT * from Users where username='" + username + "';");

        String duplicate;

        while (rs.next()) {
            duplicate = rs.getString(username);

            if (password.equals("confirmpassword") && duplicate != username) {
                statement.executeUpdate("INSERT INTO info values('" + username + "','" + password + "');");
                out.println("Registraion Successful!");
                out.println("Your Username: "+username);
                out.println("Your Password: "+password);

            }
            if (duplicate.equals(username)){
                out.println("Please choose a different username..:)");
            }
        }




    } catch (SQLException ex) {
        Logger.getLogger(RegistrationServlet.class.getName()).log(Level.SEVERE, null, ex);
    } catch (ClassNotFoundException ex) {
    } finally {
        out.close();
    }
}

问题是行
duplicate=rs.getString(用户名)。您打算从结果集中检索username列中的值,但您使用的是
username
变量,而不是字符串
“username”
。当您输入“ankur”作为用户名时,该行相当于
duplicate=rs.getString(“ankur”),并且结果集中没有名为
ankur
的列

您还有一堆其他bug:

  • rs.next()
    仅当查询找到具有指定用户名的现有用户记录时才会返回true。这意味着您只有在存在重复用户的情况下才能获得成功的注册码
  • password.equals(“confirmpassword”)
    表示用户必须在密码框中实际键入“confirmpassword”一词,否则其注册将被拒绝。我想你的意思是
    password.equals(confirmpassword)
  • 您以root用户身份登录数据库,并且存在漏洞。恶意用户可以对您的数据库执行任何操作,例如修改或删除您的数据
  • 为什么要捕获并忽略
    ClassNotFoundException

某人键入
”;截断表用户--,然后…哎呀!“似乎不起作用”并不能告诉我们太多。出了什么问题?任何特定的异常、错误消息或调试器显示代码执行意外操作的位置?@Wyzard java.sql.SQLException:未找到列“ankur”。该异常发生在哪一行?字符串“ankur”在您发布的代码中的任何地方都没有出现。@Wyzard我正在尝试输入用户名ankur..,然后它显示。。
Statement statement = (Statement) conn.createStatement();

ResultSet rs = statement.executeQuery("SELECT * from Users where username='" + username + "'");

String duplicate = null;

while(rs.next()){
duplicate = rs.getString(1);
}

if(duplicate == null){
// ur logic
}
else{
out.println("Please choose a different username..:)");
}