状态无效,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); } 

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

引用Statement的API文档 :

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

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

另外,查看准备好的语句以获取更新,它可能会更高效,更安全。