java.sql.SQLException:关闭的结果集:下一步
我没有找到SQLExeption的原因,我在(dbrs.next())时在java.sql.SQLException:关闭的结果集:下一步,java,oracle,jdbc,Java,Oracle,Jdbc,我没有找到SQLExeption的原因,我在(dbrs.next())时在中找到了它。这很简单,但在更新到Oracle Server 19之后,我发现了这个错误。我在OracleDeveloper中仍然得到了一个结果集,使用相同的帐户 Statement st = conn.createStatement(); if (Oracle){ ResultSet dbrs = st.executeQuery("select table_name from all_tables"); while
中找到了它。这很简单,但在更新到Oracle Server 19之后,我发现了这个错误。我在OracleDeveloper中仍然得到了一个结果集,使用相同的帐户
Statement st = conn.createStatement();
if (Oracle){
ResultSet dbrs = st.executeQuery("select table_name from all_tables");
while(dbrs.next()){
if (dbrs.getString(1).equals(G_IN)){
st.execute("DROP TABLE "+G_IN);
System.out.println(G_IN+" gelöscht");
}
}
dbrs.close();
}else{
String loeschen="DROP TABLE IF EXISTS \"" + G_IN +"\"";
System.out.println(loeschen);
st.execute( loeschen );
}
您不应该像while循环那样重用语句对象。要执行新查询,需要使用新的语句对象
替换
st.execute("DROP TABLE "+G_IN);
与
它应该可以工作。OP不仅要确保使用单独的语句,还必须确保禁用自动提交模式。使用此解决方案,您将如何关闭新语句?不,这不是原因。我收到了相同的错误。@Chris94这是一个符合垃圾收集条件的动态对象。它正在使用ResultSet dbrs=conn.createStatement().executeQuery(“从所有_表中选择表_名称”);加上conn.createStatement().execute(“DROP TABLE”+G_IN);
conn.createStatement().execute("DROP TABLE "+G_IN);