Servlets 检查数据库中的重复用户名
我有这个Servlet代码,我试图在数据库中检查重复的用户名,但它似乎不起作用Servlets 检查数据库中的重复用户名,servlets,Servlets,我有这个Servlet代码,我试图在数据库中检查重复的用户名,但它似乎不起作用 protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out
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
某人键入”;截断表用户--在你的站点的用户名框中输入code>,然后…哎呀!“似乎不起作用”并不能告诉我们太多。出了什么问题?任何特定的异常、错误消息或调试器显示代码执行意外操作的位置?@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..:)");
}