Помогите SQL запрос

  • Автор темы Автор темы NeMaster
  • Дата начала Дата начала

NeMaster

Новичок
Пользователь
Баллы
21
Я что то важного не понимаю пока в яве.
Хочу данные хранить в SQLite БД. Успешно в БД данные записываю, а с выборкой, пол дня убил пока не пришёл к странным выводам, и пока не понятным.

В моём классе для БД есть такой метод
Код:
public ResultSet getAddresses(String player) {
        try (Statement statement = this.connection.createStatement()) {
            ResultSet resultSet = statement.executeQuery("SELECT wallet, address FROM wallets WHERE player = '" + player + "'"); // '
            if(!resultSet.next()) {
                System.out.println("ADRR NULLLL ");
            } else {
                System.out.println("ADRR NOT nl ");
                System.out.println(resultSet.getString("address"));
            }
            return resultSet;
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

Который я использую так
Код:
ResultSet addresses = db.getAddresses(uuid);
try {
    while(addresses.next()) {
        String wallet = addresses.getString("wallet");
        String address = addresses.getString("address");
        s.sendMessage(wallet + " address: " + ChatColor.RED+address);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

И вот этот кусок кода
Код:
            if(!resultSet.next()) {
                System.out.println("ADRR NULLLL ");
            } else {
                System.out.println("ADRR NOT nl ");
                System.out.println(resultSet.getString("address"));
            }
я дописал когда отчаянно не понимал, почему while(addresses.next()) ничего не перечисляет. Дамал может записи не выбираются, но нет этот вставленный код вывел в консоль строку "ADRR NOT nl" и тут я не понимаю почему resultSet внутри функции содержит запись, а там куда я его ретурном вернул нет.
 
.next() переключает на следующий элемент в resultset, который получаешь методом, к примеру, resultSet.getString(...), и так по кругу. такой способ как раз предназначен для цикла while.
В методе getAddresses ты уже один раз переключил элемент, но значение не взял, и, если далее не осталось элементов, то next() вернет false, а геттеры сета будут сыпать исключения(если попытаешься их вызвать)
 
Я могу согласиться с тем что возвращать resultSet выглядит немного грязно, но сам факт что не могу вернуть удивляет.

Сделал списком. А после того как я попользуюсь этим списком его надо как то явно уничтожать?

Код:
List<Wallet> list = new ArrayList<>();
while(resultSet.next()) {
    Wallet wallet = new Wallet();
    wallet.address = resultSet.getString("address");
    wallet.wallet = resultSet.getString("wallet");
    list.add(wallet);
}
return list;
 
Как уже сказали выше, у тебя одна запись в повторный resultSet.next() пустой и вернет false.
 
Назад
Верх