Как проверить, есть ли в наборе результатов возвращенные записи без перемещения курсора в Java

Мне интересно, как проверить, есть ли в наборе результатов какие-то записи, как показано ниже,

while(((ResultSet) rs).next()){
    ((ResultSet) rs).previous();
    return true;
}

Но я не могу этого сделать, так как тип набора результатов - TYPE_FORWARD_ONLY, есть ли удобный API для моего случая? wasNull определенно не подходит, спасибо за любые указатели!

Четное


person Even    schedule 17.07.2011    source источник


Ответы (4)


 if(!resultSet.isBeforeFirst()){
   System.out.println("resultset contin no rows");
 }

isBeforeFirst() возвращает true, если курсор находится перед первой строкой; false, если курсор находится в любой другой позиции или результирующий набор не содержит строк

person Fathah Rehman P    schedule 02.05.2012

Ответ в том, что вы не можете. Это природа наборов строк SQL: вы получаете уведомление, когда достигаете конца, но вы не знаете, пока не попытаетесь получить следующую запись, а ее нет. Так оно и есть.

person Bohemian♦    schedule 17.07.2011

Поскольку вы не можете знать, прежде чем сделать rs.next() ход о состоянии вашего ResultSet, вы, вероятно, могли бы:

  1. запустите оператор count перед созданием ResultSet или

  2. сделайте первый rs.next() или rs.first() и используйте его содержимое, если ваш набор не пуст, например:

            boolean state = rs.first(); // or rs.next();
            if (state == false)
                System.out.println("empty");
            else {
                System.out.println("not empty");
                while (state) {
                    System.out.println(rs.getInt(1));
                    // use your row ...
                    state = rs.next();
                }
            }
    
person Costis Aivalis    schedule 17.07.2011

Если ваш первый вызов rs.next() был успешным и он вернул true, это означает, что были возвращены некоторые записи.

person Suraj Chandran    schedule 17.07.2011
comment
Я знаю, проблема в том, что я не могу перемещать курсор вперед и назад, потому что SQLException пойман, тип набора результатов - TYPE_FORWARD_ONLY.. - person Even; 17.07.2011