Проблема с SQL, ResultSet в Java

Как я могу выполнить итерации ResultSet? Я попробовал следующим кодом, но я получаю ошибку java.sql. SQLException: Недопустимая операция на пустом наборе результатов.

 while ( !rs.isLast()) {
     rs.next();
     int id = rs.getInt("person_id");
     SQL.getInstance().getSt().execute("INSERT ref_person_pub(person_id) VALUES(" + id + ")");
}

Обновление: я нашел проблему. Я использовал только один оператор от одиночного элемента SQL. Когда оператор закрывается, он не может использоваться снова.

5
задан aphex 30 March 2010 в 21:53
поделиться

2 ответа

Согласно учебнику JDBC :

resultSet = statement.executeQuery();
while (resultSet.next()) { 
    int id = resultSet.getInt("id");
    // ...
}

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

Если предполагается, что вместо нескольких строк будет возвращена ноль или одна строка, лучше используйте вместо этого if :

resultSet = statement.executeQuery();
if (resultSet.next()) { 
    int id = resultSet.getInt("id");
    // ...
}

Таким образом, у вас есть возможность добавить else .

Обновление , в котором говорится и не связано с реальной проблемой, я вижу больше потенциальных проблем в вашем коде: во-первых, вы, кажется, запускаете несколько запросов, которые зависят друг от друга. Это можно сделать более эффективно. Вы знакомы с SQL-соединениями ? Во-вторых, не происходит ли утечка ресурсов JDBC? Похоже, вы получаете оператор, но не получаете его дескриптора, чтобы его можно было правильно закрыть после использования. Пожалуйста, обратитесь к ранее связанному руководству JDBC, чтобы получить базовое объяснение того, как правильно работать с кодом JDBC, и к этой статье , чтобы узнать несколько основных начальных примеров того, как правильно использовать JDBC. В противном случае ваше приложение может рано или поздно выйти из строя, когда в БД закончатся ресурсы.

11
ответ дан 18 December 2019 в 14:44
поделиться
while(rs.next()) {
   // iterate
}
2
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

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