我正在尝试检查表中是否已存在用户名: 数据库还将字段设置为唯一 该方法将返回一个布尔值,说明用户名是否已存在。 即使用户名相同,我的代码中将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;
}
如果你能提供帮助,我会很感激!
答案 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(用户名)