Проверьте имя пользователя, существующее в базе данных Java netbeans - PullRequest
0 голосов
/ 14 апреля 2020

Я пишу код для проверки доступности имени пользователя в базе данных.

public boolean checkUsername(String u) {

        boolean userExists = false;

        try {
            String check = "SELECT * FROM users ORDER BY user_Name desc";

            pst = conn.prepareStatement(check);

            rs = pst.executeQuery();

            String usernamePool;

            if (rs.next()) {
                usernamePool = rs.getString("user_Name");//column name
                if (usernamePool.equals(u)) {
                    userExists = true;
                }
                if (userExists = true) {
                    JOptionPane.showMessageDialog(null, "Username already in use", "Error", JOptionPane.ERROR_MESSAGE);
                }
            }

        } catch (Exception e) {

            JOptionPane.showMessageDialog(null, e.toString());
        }

        return userExists;

    }

Каждый раз, когда я вызываю этот метод, он говорит, что имя пользователя уже используется, я думаю, что логическое значение всегда верно, почему это так?

else if (checkUsername(signUpUsername.getText().toString())) {
            JOptionPane.showMessageDialog(null, "Profile Created Failed", "Error", JOptionPane.ERROR_MESSAGE);
        }

вот как я называю метод

Если кто-то может сказать, что с ним не так, это будет очень полезно

Ответы [ 2 ]

1 голос
/ 14 апреля 2020
if(userExists = true)

Вы использовали один символ равенства вместо двух, который является оператором присваивания, а не оператором равенства. Оператор присваивания возвращает присвоенное значение, поэтому он всегда будет возвращать true. Измените вышеприведенную строку на:

if(userExists)
1 голос
/ 14 апреля 2020
if (userExists = true) {

должно быть

if (userExists) {

Также нет необходимости перебирать всех пользователей. SQL поддерживает предложение WHERE, которое вы можете использовать с подготовленными операторами, чтобы избежать SQL Инъекции.

Вот ваш метод, как я бы написал (вы можете использовать connection как глобальный в вашем классе это нормально, но не делайте этого с statements и result sets ...):

public boolean checkUsername(String username) {

    boolean userExists = false;

    try {
        String SQL = "SELECT * FROM users WHERE username = ?";
        Connection connection = null;
        PreparedStatement preparedStatement = connection.prepareStatement(SQL);
        preparedStatement.setString(1, username);
        ResultSet rs = preparedStatement.executeQuery();
        userExists = rs.next();

    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, e.toString());
    }

    return userExists;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...