Java SQL检查用户名是否已存在

时间:2014-01-24 16:38:41

标签: java sql database

我正在尝试检查表中是否已存在用户名: 数据库还将字段设置为唯一 该方法将返回一个布尔值,说明用户名是否已存在。 即使用户名相同,我的代码中将usernameExists var设置为true的部分也不会运行。

 public static boolean CheckUsernameExists(String username)
{
    boolean usernameExists = false;

    try
    {

        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(urlDB, usernameDB, passwordDB);

        PreparedStatement st = connection.prepareStatement("select * from Members order by username desc");
        ResultSet r1=st.executeQuery();
        String usernameCounter;
         if(r1.next()) 
         {
           usernameCounter =  r1.getString("username");
           if(usernameCounter == username) //this part does not happen even if it should
           {
               System.out.println("It already exists");
              usernameExists = true;
           }
         }


     }

     catch (SQLException e) 
     {
        System.out.println("SQL Exception: "+ e.toString());
     } 
     catch (ClassNotFoundException cE) 
     {
        System.out.println("Class Not Found Exception: "+ cE.toString());
     }

 return usernameExists;
 }

如果你能提供帮助,我会很感激!

4 个答案:

答案 0 :(得分:2)

使用if(usernameCounter.equals(username))。字符串比较很棘手。这已在here中详细讨论过。

答案 1 :(得分:2)

正如大家所指出的,在比较字符串时需要使用.equals。但是对于你的使用,我建议使用.equalsIgnoreCase,因为你可能希望它将“MSmith”和“msmith”视为相同。

此外,执行此检查的更有效方法是选择表格中的行

PreparedStatement st = connection.prepareStatement("select * from Members username=?");
st.setString(1,username);

然后,如果你得到一行,你知道用户名已被使用。如果您没有获得一行或者您收到RowNotFoundException,那么您可以将其视为“未使用用户名”。同样,在进行检查时,您需要小心输入的情况。

答案 2 :(得分:1)

绝不使用String比较两个==个实例,使用equals()==检查身份,而不是相等。)

您也可以直接在查询中使用用户名,而不是从查询结果中获取用户名:

PreparedStatement st = connection.prepareStatement("select * from Members where username = ?");
st.setString(1, username);
ResultSet r1=st.executeQuery();
if(r1.next()) {
  usernameExists = true;
}

答案 3 :(得分:0)

您的问题是 usernameCounter ==用户名。您正在比较我认为您想要比较字符串的对象。

尝试 usernamecounter.equals(用户名)