java – SQLSTATE 24000 – 无效的游标状态

我连接到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();
            }

        }

谢谢.

在Statement接口的JDBC Javadocs上找到了这个:“用于执行静态SQL语句并返回它产生的结果的对象.

默认情况下,每个Statement对象只能同时打开一个ResultSet对象.因此,如果读取一个ResultSet对象与另一个ResultSet对象的读取交错,则每个ResultSet对象必须由不同的Statement对象生成. Statement接口中的所有执行方法都隐式关闭一个statment的当前ResultSet对象(如果存在open对象). “
Statement javadoc

因此,如果您希望同时打开两个ResultSet,我认为您需要两个不同的语句.或者您需要完成处理第一个ResultSet并关闭它,以便您可以重新使用Statement来创建第二个ResultSet.

https://stackoverflow.com/questions/3727907/sqlstate-24000-invalid-cursor-state

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:java – SQLSTATE 24000 – 无效的游标状态