Первая строка Resultset пропускается, когда while (rs.next) выполняется в Java - PullRequest
0 голосов
/ 28 декабря 2018

Я пытаюсь получить набор результатов запроса SQL в классе Java.Проблема в том, что первая строка моей таблицы никогда не отображается в моем интерфейсе.Поэтому я его отладил.

Когда цикл while выполняется впервые, строка while(rs.next) выполняется, затем она не входит в цикл, возвращается обратно в начало цикла while и снова выполняет строку while(rs.next),теперь он входит в цикл while и устанавливает набор результатов.

Но так как он не входит в цикл в первый раз, первая строка моей таблицы не устанавливается в набор результатов.

Я не смог найти проблему здесь.

Я пытался do{} while(rs.next), но иногда он выдает исчерпанное исключение набора результатов

    String SQL_QUERY = select * from my_table;
Statement stt = null;
stt= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
    ResultSet.CONCUR_UPDATABLE,
                ResultSet.HOLD_CURSORS_OVER_COMMIT);

ResultSet rs = stt.executeQuery(SQL_QUERY);
if (rs != null) {
    rs.absolute(startRow); // I need to go to some specific row according to users request that is why I used this
} 

while(rs.next){
    // rs.getString...
}

Ответы [ 2 ]

0 голосов
/ 28 декабря 2018

Вы начинаете с startRow + 1, потому что вы устанавливаете rs.next после rs.absolute.Просто измените это, и это будет работать.

String SQL_QUERY = select * from my_table;
Statement stt = null;
stt= conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, 
ResultSet.CONCUR_UPDATABLE,
            ResultSet.HOLD_CURSORS_OVER_COMMIT);

ResultSet rs = stt.executeQuery(SQL_QUERY);
if (rs != null) {
rs.absolute(startRow); // here you are at row startRow
} 

while(rs.next()){
// and here you are at row startRow + 1
}
0 голосов
/ 28 декабря 2018

Заменить while на

do {
    //old body here            
} while (rs.next())

Это условие проверки конструкции после выполнения тела.Эффективно пропустив первый next звонок.

Возможно, вы захотите проверить результат rs.absolute(startRow).Если это false, то результирующий набор содержит менее startRow строк.

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