1

如何使用前面的 Execute 查询结果 While 循环执行 Query。

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

一旦执行了第二个查询,则无法执行前一个 rs。例如:如果执行第二个查询,那么第一个查询有 2 条记录,那么第一个 Qry 没有获取第二个记录。

请尽快给出解决方案。

谢谢。

4

2 回答 2

0

大概在你的例子con中是一个陈述;javadocs状态:

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

所以你需要两个单独的语句。

编辑:我同意@ABCade 和之前的答案,但你应该在集合中思考并让数据库进行连接,这样你就有了一个结果集。如果您当前正在使用第一个结果集中的数据进行工作,您只需要跟踪您以前是否看过该数据,例如通过跟踪一个或多个列的最后一个值。

于 2012-06-22T07:10:10.887 回答
0

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

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

或者:

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

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

于 2012-06-22T09:33:37.177 回答