Программа Java завершается перед Resultset.next()

#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() .