如何在循环时执行Qry结果集执行查询?

时间:2012-06-22 06:18:49

标签: java sql database oracle

如何使用先前的执行查询结果执行查询。循环。

Resultset rs = con.excuteQuery(Query1.toString);
While(rs.next()){
  Resultset rs1 = con.excuteQuery(Query2.toString);
  while(rs1.next()){
  }
}

执行第二个Query后,无法执行上一个rs。 对于Ex:1st Query有2条记录 如果执行了第二个查询,则第一个Qry没有获取第二个记录。

请尽快给出解决方案。

感谢。

2 个答案:

答案 0 :(得分:0)

据推测,在你的例子中con是一个陈述; javadocs州:

  

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

所以你需要两个单独的陈述。

编辑:我同意@ A.B.Cade和previous answer,但您应该考虑使用数据库并让数据库进行连接,因此您只需要一个结果集。如果您目前正在使用第一个结果集中的数据进行工作,您只需要跟踪您之前是否看过这些数据,例如:通过跟踪一个或多个列的最后一个值。

答案 1 :(得分:0)

如评论中所述,如果您的两个查询是相关的,那么您应该使用内部联接将它们合并为一个。否则,您的选项取决于数据库和/或驱动程序。

1)使用两个不同的连接来执行您的查询

或者:

2)[如果您的驱动程序允许]使用两个PreparedStatements而不是直接在连接上执行查询。

我建议你养成使用准备好的陈述的习惯,除非你有充分的理由不这样做。与直接通过连接执行查询相比,它们具有各种优势。