не возвращающая строку ResultSet [дубликат]

Посмотрите на этот пример:

var app = angular.module('plunker', []);

app.controller('MainCtrl', function($scope,$http) {

    var getJoke = function(){
        return $http.get('http://api.icndb.com/jokes/random').then(function(res){
            return res.data.value;  
        });
    }

    getJoke().then(function(res) {
        console.log(res.joke);
    });
});

Как вы можете видеть, getJoke возвращает разрешенное обещание (оно разрешено при возврате res.data.value). Таким образом, вы ждете, пока запрос $ http.get не будет завершен, а затем выполнится console.log (res.joke) (как обычный асинхронный поток).

Это plnkr:

http://embed.plnkr.co/XlNR7HpCaIhJxskMJfSg/

6
задан Luiggi Mendoza 18 April 2015 в 21:17
поделиться

4 ответа

Сначала вы должны использовать инструкцию next.

ResultSet set = statement.executeQuery();
if (set.next()) {
    userName = set.getString(1);
    //your logic...
}

UPDATE

Как говорится в документации по Java 6

Курсор ResultSet первоначально располагается перед первой строкой; первый вызов метода next делает первую строку текущей строкой; второй вызов делает вторую строку текущей строкой и так далее.

Это означает, что при выполнении предложения

ResultSet set = statement.executeQuery();

ResultSet set будет создан и указывается на строку перед первым результатом данных. Вы можете посмотреть его следующим образом:

SELECT email, firstname FROM registrationinformation

    email              | firstname
    ____________________________________
0                                        <= set points to here
1   email1@gmail.com   | Email1 Person
2   foo@bar.com        | Foo Bar

Итак, после открытия ResulSet вы выполняете метод next, чтобы перенести его на первый row.

if(set.next()) 

Теперь set выглядит следующим образом.

    email              | firstname
    ____________________________________
0
1   email1@gmail.com   | Email1 Person   <= set points to here
2   foo@bar.com        | Foo Bar

Если вам нужно прочитать все данные в ResultSet, вы должны использовать while вместо if :

while(set.next()) {
    //read data from the actual row
    //automatically will try to forward 1 row
}

Если set.next() возвращает false, это означает, что не было строки для чтения, поэтому ваш цикл while будет завершен.

Дополнительная информация здесь .

31
ответ дан Luiggi Mendoza 25 August 2018 в 23:01
поделиться

Вы должны установить указатель в правильное положение:

while(set.hasNext()){
    set.next();
    String a = set.getString(1);
    String b = set.getString(2);
} 
1
ответ дан Christian Kuetbach 25 August 2018 в 23:01
поделиться

после инициализации ResultSet проверить, имеет ли курсор в нем строку или нет.

if(rs.next()){ //your all other works should go here }

0
ответ дан Durgesh Kumar 25 August 2018 в 23:01
поделиться

ResultSet set = statement.executeQuery ();

Итерировать набор, а затем получить String.

        while(set.next()) {
me = set.getString(1);  // <<---------- Line number 28

}
0
ответ дан kosa 25 August 2018 в 23:01
поделиться
Другие вопросы по тегам:

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