我正在运行代码,但是收到“无效状态,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);
}
答案 0 :(得分:8)
您无法在当前使用Statement
进行迭代的ResultSet
上执行另一个SQL查询。执行此操作将关闭之前打开的光标(SELECT
查询分配ResultSet
):
默认情况下,每个Statement对象只能打开一个ResultSet对象 同时。因此,如果读取一个ResultSet对象是 与另一个的读取交错,每个必须已经生成 通过不同的Statement对象。 Statement中的所有执行方法 如果是,接口隐式关闭一个statment的当前ResultSet对象 打开一个。
从Statement
创建另一个Connection
个实例,我们将其称为updateStmt
和executeUpdate()
。
此外,请查看Prepared Statements以了解更新,它可能会更高效,更安全。