Java - 如何检查MySQL表中是否已存在用户名

Abd*_*dan 1 java mysql database

我想检查表中是否username已经存在database.

Java代码:

if (e.getSource() == jButton2)
{
  U = jTextField1.getText();
  if (jTextField1.getText().trim().equals(""))
  {
    JOptionPane.showMessageDialog(this, "Please Write Username !");
  } 
  else if (jPasswordField1.getText().equals(""))
  {
    JOptionPane.showMessageDialog(this, "Please Write Password !");
  } 
  else
  {
    try {
      String Driver = "com.mysql.jdbc.Driver"; 
      String URL = "jdbc:mysql://localhost:3306/LoginForm"; 
      Class.forName(Driver); 
      Connection Conn = DriverManager.getConnection(URL, "root", "12345");
      Statement S = Conn.createStatement();
      ResultSet RS = S.executeQuery(
          "SELECT * FROM login where username ='" + U + 
          "' and Password ='" + jPasswordField1.getText() + "'");

      while (RS.next()) {
        String Username = RS.getString("Username");
        String Password = RS.getString("Password");
        String Admin = RS.getString("Admin");

        if (Username.equals(U) & Password.equals(jPasswordField1.getText()) &
          Admin.equals("0")) 
        {

          JOptionPane.showMessageDialog(this, "Logged In Successfully !");
          this.dispose();
          NormalUsers NU = new NormalUsers();
          break;

        } 
        else if (Username.equals(U) & 
          Password.equals(jPasswordField1.getText()) & Admin.equals("1"))
        {

          JOptionPane.showMessageDialog(this, 
            "Logged In Successfully , Opening Administration Panel !");

          this.dispose();
          AdminPanel AP = new AdminPanel();
          break;
        }
        else 
        {
          JOptionPane.showMessageDialog(this, "Invalid Username Or Password!");
        }
      }
    } 
    catch (SQLException | ClassNotFoundException ex)
    {
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

问题是:

  • 如果没有行database,则没有错误消息:Invalid Username or Password.
  • 当我SQL手动执行查询时:SELECT * From Login我看到该行存在,但由于我过滤了password它,它没有进入while loop.

我应该如何使用java来检查MySQL表中是否存在用户名?

小智 6

对于此查询类型,您不需要遍历ResultSet.

你试图找到一个确定的记录.您将不会有两个具有相同用户名/密码的记录(我假设登录表的主键是用户名),所以只需if(rs.next())它就足够了.如果存在,请验证以确定它是否为管理员.

此外,在查询中,您已经暗示记录必须具有指定的用户名和密码,一旦返回结果集,则无需对其进行测试.

只测试用户类型,如果是管理员,则显示相应的消息,否则,执行正确的操作.

如果rs.next()不满足,则用户不存在,因此在else块中,您可以显示有关未找到或无效的用户的错误消息.


小智 5

您需要处理的是MySQL查询.我认为带有该WHERE子句的查询是您正在寻找的.

此外,您可能希望将该代码放在一个单独的类中,以防止烹饪一些意大利面条代码.

下面的链接是一个与php语言相关的答案,但你需要看的是MYSQL query和逻辑: 检查用户名是否存在

尝试这样的事情:

public String login(String uname, String password) throws Exception{

    String status=null;
    ConnectionHandler handler=new ConnectionHandler(); //class for connection
    Connection con=handler.createConnection();
    Statement stmt=con.createStatement();
    String query="select * from loginTable where username=" +
      "\""+uname+"\""+";";  //get username

    ResultSet rs=stmt.executeQuery(query); 
    String checkUser=rs.getString(1);
    String checkPass=rs.getString(2);
    if(checkUser.equals(uname) && checkPass.equals(password)){
        status="True";
    }
    else{
        status="False";
    }
    con.close();
    return status;
}
Run Code Online (Sandbox Code Playgroud)

使用此status字符串我确定用户名是否有效.让SQL做繁重的工作(就像它设计的那样)而不是用java自己编写代码.