2012-06-22 34 views
1

如何用先前的执行查询结果While循环执行查询。如何在循环中执行带有执行Qry结果集的查询?

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

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

请尽快给出解决方案。

谢谢。

+1

这里是一个类似的帖子http://stackoverflow.com/questions/935511/how-can-i-avoid-resultset-is-closed-exception-in-java。对于我自己,我同意那些说这个嵌套循环应该在查询中的人 –

回答

0

推测在你的例子中con是一个声明;在javadocs状态:

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

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

编辑︰我同意@ A.B.Cade和previous answer虽然,你应该思考集和让数据库进行加入,所以你有一个单一的结果集。如果您目前正在使用第一个结果集中的数据进行工作,那么您只需要跟踪是否曾看过该数据,例如通过跟踪一列或多列所见的最后一个值。

0

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

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

或者:

2)如果你的驱动程序,允许它]使用两个预处理语句而不仅仅是直接的连接上执行的查询。

我会建议你养成使用准备好的语句的习惯,除非你有一个非常好的理由不要。与直接通过连接执行查询相比,它们具有各种好处。