Возврат идентификаторов с номерами событий SELECT * запрос - PullRequest
0 голосов
/ 21 марта 2019

Это мой код чтения базы данных.Но это показывает только элементы с четными идентификационными номерами (например, 2,4,6 ...).Я пытался вызвать элемент с нечетным номером, но он возвращает ошибку как;

внутри rs false

Ошибка java.sql.SQLException: после завершения набора результатов

Как это могло произойти?

try {
       dbConnect dbConnect = new dbConnect();
       Connection currentCon = dbConnect.Connect();
       String sql = "SELECT * FROM vehicle";
       PreparedStatement ps = currentCon.prepareStatement(sql);
       ResultSet rs = ps.executeQuery();
       while (rs.next()) {
           System.out.println("inside rs " + rs.next());
           ystem.out.println(rs.getInt("product_id"));
           rs.getInt("product_id");
       }
} catch (SQLException e) {
       System.out.println("Error " + e);
}

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Вы звоните ResultSet#next() второй раз внутри цикла while. Удалить это:

while (rs.next()) {
   System.out.println("inside rs ");
   System.out.println(rs.getInt("product_id"));
}

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

0 голосов
/ 21 марта 2019

Вызов rs.next() перемещает курсор к следующей записи и возвращает true, если она была, или false, если ее не было.

Проблема в том, что в каждом цикле вы вызываете rs.next() дважды.

Если вы удалите дополнительный вызов и очистите другой код:

while (rs.next()) {
    int productId = rs.getInt("product_id");
    System.out.println(productId);
}

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

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