JavaFX как получить из определенной строки значение определенного столбца

Возникла проблема во время написания программы. Суть в том, что я отдаю запрос в базу данных(SELECT subscribe FROM users WHERE username="ZabSanek"). Выполняя запрос в MySQL я получаю нужное значение. А вот как организовать это в Java коде? Вот код из класса DataBaseHandler(метод getSubscribe должен возвращать значение из столбца базы данных, то есть значение подписки(оно типа int)):

public int getSubscribe(User user) {
        ResultSet resSet = null;

        String select = "SELECT subscribe FROM " + Const.USER_TABLE + " WHERE " +
                Const.USERS_USERNAME + "=?";

        try {
            PreparedStatement prSt = getDbConnection().prepareStatement(select);
            prSt.setString(1, user.getUserName());


            resSet = prSt.executeQuery();
            user.setSubscribe(resSet.getInt("subscribe"));

        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

        return user.getSubscribe();
    }

Ответы (2 шт):

Автор решения: Nowhere Man

В любом из тысяч туториалов по работе с JDBC вообще и чтением данных из ResultSet в частности указывается, что перед обращением к данным следует проверить их наличие, вызвав метод ResultSet::next.

Также с момента выпуска Java 7 летом 2011 года следует использовать try-with-resources для корректного закрытия ресурсов.

public int getSubscribe(User user) {
    String select = "SELECT subscribe FROM " + Const.USER_TABLE + " WHERE " +
                Const.USERS_USERNAME + "=?";
    try (PreparedStatement prSt = getDbConnection().prepareStatement(select)) {
        prSt.setString(1, user.getUserName());

        try (ResultSet resSet = prSt.executeQuery()) {
            if (resSet.next()) {
                user.setSubscribe(resSet.getInt("subscribe"));
            }
        }
    } catch (SQLException | ClassNotFoundException e) {
        e.printStackTrace();
    }
    return user.getSubscribe();
}
→ Ссылка
Автор решения: ツZab_San4eZ

Ответ человеку выше: Я полностью изменил код метода на Ваш. Но при проверке, значение неверно выдает. Как я понимаю, он неверно берет значение из БД, и передает просто ноль. Код DataBaseHandler класса:


    public int getSubscribe(User user) {
            String select = "SELECT subscribe FROM " + Const.USER_TABLE + " WHERE " +
                    Const.USERS_USERNAME + "=?";
            try (PreparedStatement prSt = getDbConnection().prepareStatement(select)) {
                prSt.setString(1, user.getUserName());
    
                try (ResultSet resSet = prSt.executeQuery()) {
                    if (resSet.next()) {
                        user.setSubscribe(resSet.getInt("subscribe"));
                    }
                }
            } catch (SQLException | ClassNotFoundException e) {
                e.printStackTrace();
            }
            return user.getSubscribe();
        }

Пользователь сам вводит логин и пароль, и по базе данных в методе проверяется наличие пользователя с таким паролем, после чего я ввёл переменную subscribeValue, куда присваиваю значение из БД: subscribeValue = dbHandler.getSubscribe(user); - Это уже внутри условия, когда в БД найден пользователь с таким логином и паролем, и он берет значение из этой строки найденной. после чего создаётся пользователь, в которого вбиваются данные, которые я получал:

                    User user = new User();
                    user.setUserName(loginText);
                    user.setPassword(loginPassword);
                    user.setSubscribe(subscribeValue);
                    AppController.setAuthedUser(user);
                    loginUser(loginText, loginPassword);

Потом пользователя с такими данными он передает в другой класс. По итогу, логин и пароль передаются правильно, а при выводе subscribeValue я всегда получаю "0", когда в Базе данных вбито значение 111, а тип в БД стоит tinyint, с галочкой на zerofill notnull(Просто для подробности написал)

→ Ссылка