繁体   English   中英

Java数据库编程 - 为什么这些值不相等?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM