Неверное состояние, объект ResultSet закрыт - PullRequest
4 голосов
/ 01 сентября 2011

Я выполняю код, но получаю «Неверное состояние, объект ResultSet закрыт». ошибка. Что вызывает ошибку?

try{
    query = "SELECT * FROM BUNDLE_TEMP "
                  + "MINUS "
                  + "SELECT * FROM BUNDLE";

            rs = stmt.executeQuery(query);

            while (rs.next()){
                String bundle = rs.getString("BUNDLE");
                String week = rs.getString("WEEK");
                String sched_dt = rs.getString("SCHED_DT").replace(" 00:00:00.0", "");
                String dropper_id = rs.getString("DROPPER_ID");


                query = "INSERT INTO BUNDLE "
                            + "VALUES ('"
                                + bundle+"','"
                                + week+"','"
                                + sched_dt+"','"
                                + dropper_id+"')";

                stmt.executeUpdate(query);
            }
        }catch(Exception e){
            System.out.println("Error while trying to insert into BUNDLE\n"+query+"\n"+ e);
        }

1 Ответ

8 голосов
/ 01 сентября 2011

Вы не можете выполнить другой SQL-запрос на том же Statement, который вы сейчас повторяете с ResultSet.Это приведет к закрытию ранее открытого курсора (ваш запрос SELECT или ResultSet):

Чтобы процитировать документы API для оператора :

По умолчанию только один объект ResultSet на объект Statement может быть открыт одновременно.Следовательно, если чтение одного объекта ResultSet чередуется с чтением другого, каждый из них должен быть сгенерирован различными объектами Statement.Все методы выполнения в интерфейсе Statement неявно закрывают текущий объект ResultSet статута, если существует открытый.

Создайте еще один Statement экземпляр из вашего Connection, назовем его updateStmt и executeUpdate() на этом.

Кроме того, посмотрите в Подготовленные заявления для вашего обновления, оно, вероятно, будет более производительным и безопасным.

...