SQLSTATE 24000 - Неверное состояние курсора - PullRequest
3 голосов
/ 16 сентября 2010

Я подключаюсь к базе данных DB2 и делаю следующий запрос. Я не понимаю, почему я получаю ошибку: «неверное состояние курсора».

public static void blivPar() {
            try {
                Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);
                stmt.setMaxRows(1000);

                ResultSet drenge = stmt.executeQuery("SELECT * FROM People WHERE sex='M'");
                ResultSet piger = stmt.executeQuery("SELECT * FROM People WHERE sex='F'");
                drenge.first();
                piger.first();
                int i=0;
                while(drenge.next()) {
                    while(piger.next()) {
                        i++;
                        System.out.print(i);
                        stmt.execute("INSERT INTO Couples Values ('"+drenge.getString(1) +
                                "','" + drenge.getString(2) +
                                "','" + piger.getString(1) +
                                "','" + piger.getString(2) + "')");
                    }
                }
            } catch (Exception ex) {
                ex.printStackTrace();
            }

        }

Спасибо.

1 Ответ

6 голосов
/ 16 сентября 2010

Обнаружено это в Javadocs JDBC для интерфейса Statement: «Объект, используемый для выполнения статического оператора SQL и возврата результатов, которые он выдает.

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

Так что мне кажется, что вам нужно два разных утверждения, если вы хотите, чтобы два ResultSet открывались одновременно.Или вам нужно закончить обработку вашего первого ResultSet и закрыть его, чтобы вы могли повторно использовать Statement для создания второго ResultSet.

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