#java #eclipse #resultset
#java #eclipse #набор результатов
Вопрос:
Моя программа завершается сразу после печати hello in getImportance beg
. Почему так? В моей MAIL
таблице есть значения.
Connection connection = connectToDatabase();
Statement stmt = connection.createStatement();
ResultSet mailset = stmt.executeQuery("SELECT SUBJECT from MAIL");
ResultSet keywordset = stmt.executeQuery("SELECT SKEYWORD FROM KEYWORD");
System.out.println("hello in getImportance beg");
while(mailset.next())
{
System.out.println("hello in first while");
while(keywordset.next())
{
System.out.println("hello in second while");
if(mailset.getString("SUBJECT").equals(keywordset.getString("SKEYWORD")));
{
System.out.println("hello in if");
stmt.executeUpdate("UPDATE KEYWORD SET IMPORTANCE = IMPORTANCE'" 1 "'");
stmt.executeUpdate("COMMIT");
}
}
}
mailset.close();
keywordset.close();
connection.close();
Чего я не понимаю?
Спасибо!
Спасибо всем за ответы. Определение второго, ResultSet
после первого while
, сделало свое дело.
Комментарии:
1. Возможно, ваш
mailset
файл пуст.2. Запустите свой код в отладчике и выполните пошаговое выполнение кода.
3. Вы получаете какие-либо исключения? Вы уверены, что передаваемый вами запрос действительно что-то возвращает?
4. Вы не показали никакой обработки исключений — я предполагаю, что генерируется исключение. Как вы это запускаете?
5. В качестве дополнительного примечания, объекты подключения по умолчанию имеют автоматическую фиксацию, поэтому
COMMIT
выполнение обновления в конце не имеет большого значения. Если вы действительно хотите правильное разграничение транзакций, отключите автоматическую фиксацию при подключении и используйте методыcommit
иrollback
дляConnection
объекта. Пожалуйста, прочтите .
Ответ №1:
Очевидно, что ваш цикл while не запущен.
Проверьте результат mailset.next()
Ответ №2:
Вероятно, проблема в том, что вы пытаетесь получить два ResultSet
файла из одного Statement
.
Из java.sql.Statement
документации: «По умолчанию одновременно может быть открыт только один объект ResultSet для каждого объекта Statement. Следовательно, если чтение одного объекта ResultSet чередуется с чтением другого, каждый из них, должно быть, был сгенерирован разными объектами Statement. Все методы выполнения в интерфейсе Statement неявно закрывают текущий объект ResultSet statment, если существует открытый объект.»
Ответ №3:
Проблема может заключаться в mailset
. вероятно, это не дает результата. Вы можете проверить это с помощью System.out.println(mailset.next());
перед первым циклом или отладить его.
Еще одна проблема во втором наборе результатов. Насколько я понимаю: вы пытаетесь выполнить итерацию каждый раз по keywordset. Затем вам нужно перейти к началу результирующего набора после второго цикла while, (while(keywordset.next())
используя keywordset.beforeFirst()
.