[英]Java Database Programming - Why aren't these values “equal”?
我正在研究一个学校的项目,它需要一个非常基本的登录功能(没什么太奇特,看看密码将如何保留为纯文本)。 我有一个测试数据库,并已经过彻底测试,所有正在引用和从数据库中提取的值也可以正确显示。 您将在代码中看到,要比较的每个变量的类型都是String类型。 我的问题是,为什么变量userOut和un不相等? (我甚至尝试在它们中单独使用.toString()方法,并且一起试图让它们“相等”)。
public static void main(String[] args) throws SQLException {
try {
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/users", "root", "Hsiri0758");
System.out.println("Database connected...");
Statement stat = conn.createStatement();
Statement pwstat = conn.createStatement();
Scanner scan = new Scanner(System.in);
System.out.println("Username: ");
String un = scan.nextLine();
System.out.println("Password: ");
String pw = scan.nextLine();
ResultSet unRset = stat.executeQuery("SELECT username FROM accounts WHERE username = \"" + un + "\";");
unRset.next();
String userOut = unRset.getString(1);
ResultSet pwRset = pwstat.executeQuery("SELECT password FROM accounts WHERE password = \"" + pw + "\";");
pwRset.next();
String pwordOut = pwRset.getString(1);
if (userOut == un) {
System.out.println("Welcome " + un + "!");
}
else {
System.out.println("Invalid username.");
}
conn.close();
}
catch (SQLException ex) {
ex.printStackTrace();
}
}
将此行替换为if (userOut == un) {
to if (userOut.equals( un))
{
请参阅此有关的详细信息==
和.equals()
除了像1
这样的原语之外,你必须将值与java中的equals()
方法进行比较。
所以在你的代码中这意味着: userOut.equals(un)
。
最后你会得到:
if (userOut.equals(un)) {
System.out.println("Welcome " + un + "!");
}
如果有机会,您应该将已知的String
与输入进行比较,因为您可以避免使用NullPointerException
。
一个常见问题:
public void someMethod(String someParameter) {
if(someParameter.equals(MY_CONSTANT)) {
// ...
}
}
这应该重构为:
public void someMethod(String someParameter) {
if(MY_CONSTANT.equals(someParameter)) {
// ...
}
}
如果您要比较字符串,请尝试使用equals
而不是==
您还可以使用equalsIgnoreCase
来避免case sensitive
问题
要比较java中的对象,请使用.equals()方法而不是“==”运算符
替换以下代码
if (userOut == un)
至
if (userOut.equals(un))
如果你想忽略使用如下的情况
if (userOut.equalsIgnoreCase(un))
在Java中使用==
运算符时,您只是看到引用变量是否引用相同的字符串。 因此,在您的情况下,这将始终评估为false。
要简单地比较字符串,请尝试userOut.equals(un)
。 这将检查字符串的实际内容以查看它们是否相等。 如果是,它将返回true。
欲了解更多信息,请访问:
http://www.thejavageek.com/2013/07/27/string-comparison-with-equals-and-assignment-operator/
==用于客户端脚本,如javascript或jquery。 服务器端需要equals或equalsIgnoreCase。
这是因为String是一个类,而不是数据类型。 你实际上只是将两个类引用相互比较而不是实际的字符串。 您必须使用类设计器提供的equal()来比较String的两个实例的内容:
userOut.equals(un)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.