状态无效,ResultSet对象将关闭

时间:2011-08-31 20:50:13

标签: java jdbc resultset

我正在运行代码,但是收到“无效状态,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 个答案:

答案 0 :(得分:8)

您无法在当前使用Statement进行迭代的ResultSet上执行另一个SQL查询。执行此操作将关闭之前打开的光标(SELECT查询分配ResultSet):

引用API docs for Statement

  

默认情况下,每个Statement对象只能打开一个ResultSet对象   同时。因此,如果读取一个ResultSet对象是   与另一个的读取交错,每个必须已经生成   通过不同的Statement对象。 Statement中的所有执行方法   如果是,接口隐式关闭一个statment的当前ResultSet对象   打开一个。

Statement创建另一个Connection个实例,我们将其称为updateStmtexecuteUpdate()

此外,请查看Prepared Statements以了解更新,它可能会更高效,更安全。