Java ResultSet, как проверить, существуют ли какие-либо результаты

В спецификации это упоминается:

Это верно даже в том случае, если работа выполняется внутри инициируемой конструктором микрозадачи, поскольку контрольная точка для микрозадачи может возникнуть сразу после построения. [ 112] BLOCKQUOTE>

302
задан kal 14 May 2009 в 19:08
поделиться

4 ответа

Верно, изначально курсор ResultSet указывает на перед первой строкой, если первый вызов next () возвращает ] false , то в ResultSet не было данных.

Если вы используете этот метод, вам может потребоваться вызвать beforeFirst () сразу после его сброса, так как теперь он позиционируется за первой строкой.

Следует отметить, однако, что ответ Сейфера ниже является более элегантным решением этого вопроса.

229
ответ дан 23 November 2019 в 01:23
поделиться

Это сработает, если вы хотите увидеть, есть ли какие-нибудь строки в результирующем наборе. Да.

Обратите внимание, что next () всегда перемещается к следующей строке, поэтому, если вы планируете выполнять какое-либо чтение из набора результатов, вы должны это учитывать.

Обычное использование с ResultSet ( при простом чтении) это:

while (resultSet.next())
{
   ... read from the row here ...
}

Что, очевидно, не будет работать правильно, если вы уже один раз вызываете next () , чтобы проверить, был ли набор результатов пуст, так что следите за этим. Хотя существуют методы "резервного копирования", они поддерживаются не для всех типов наборов результатов.

5
ответ дан 23 November 2019 в 01:23
поделиться

Обычно вы делаете что-то вроде этого:

while ( resultSet.next() ) { 
   // Read the next item
   resultSet.getString("columnName");
}

Если вы хотите сообщить о пустом наборе, добавьте переменную, подсчитывающую прочитанные элементы. Если вам нужно прочитать только один элемент, тогда вашего кода достаточно.

19
ответ дан 23 November 2019 в 01:23
поделиться

вы всегда можете выполнить следующий шаг вперед и просто выполнить проверку цикла после завершения

if (!resultSet.next() ) {
    System.out.println("no data");
} else {

    do {
     //statement(s)
    } while (resultSet.next());
}
50
ответ дан 23 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: