JDBC 如果在数据库中找不到,要求用户重新输入用户名和密码的登录

JDBC login that asks user to re-enter username and password if not found in database

所以我正在尝试练习使用数据库并决定制作一个银行系统。我正在使用 MariaDB。 我想这样做,以便用户可以登录,如果信息与数据库中的任何内容都不匹配,他们必须重新输入用户名和密码,直到匹配为止,但我无法弄清楚.这是我第一次将 sql 实现到 java 中,所以如果我有任何错误,我深表歉意。我已经研究过,但我能找到的解决方案是使用 swing 或 javafx,但我现在不想制作图形用户界面。无论如何,我不太确定我在这部分做了什么。

public void loginAccount(Connection conn) throws SQLException {
        String login;
        ResultSet rs;

        do {
            System.out.print("Enter Username: ");
            Username = in.nextLine();
            System.out.print("Enter Password: ");
            Password = in.nextLine();

            login = "SELECT * FROM Person WHERE Username = ? AND AccPassword = ?";
            PreparedStatement ps = conn.prepareStatement(login);

            ps.setString(1, Username);
            ps.setString(2, Password);

            rs = ps.executeQuery(login);

        }   while (!rs.next());
    }

我不断收到 java.sql.SQLSyntaxErrorException:您的 SQL 语法有误;查看与您的 MariaDB 服务器版本对应的手册,了解在 '? 附近使用的正确语法。和帐户密码 = ?'在第 1 行

另外,我原来有

login = "SELECT * FROM Person WHERE Username = " +Username+ " AND AccPassword = " + Password;

但我在某处读到使用 + 是不好的做法。不确定这是不是真的。

您使用了错误的 PreparedStatement 方法。

你应该使用

rs = ps.executeQuery();

以便您的语句在占位符实际具有值的位置执行。

您打算打电话给 PreparedStatement.executeQuery()

rs = ps.executeQuery();

但你调用了一个静态方法 Statement.executeQuery(String sql)

rs = ps.executeQuery(login);