如何使用先前的执行查询结果执行查询。循环。
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没有获取第二个记录。
请尽快给出解决方案。
感谢。
答案 0 :(得分:0)
据推测,在你的例子中con
是一个陈述; javadocs州:
默认情况下,每个Statement对象只能打开一个ResultSet对象 同时。因此,如果读取一个ResultSet对象是 与另一个的读取交错,每个必须已经生成 通过不同的Statement对象。 Statement中的所有执行方法 如果是,接口隐式关闭一个statment的当前ResultSet对象 打开一个。
所以你需要两个单独的陈述。
编辑:我同意@ A.B.Cade和previous answer,但您应该考虑使用数据库并让数据库进行连接,因此您只需要一个结果集。如果您目前正在使用第一个结果集中的数据进行工作,您只需要跟踪您之前是否看过这些数据,例如:通过跟踪一个或多个列的最后一个值。
答案 1 :(得分:0)
如评论中所述,如果您的两个查询是相关的,那么您应该使用内部联接将它们合并为一个。否则,您的选项取决于数据库和/或驱动程序。
1)使用两个不同的连接来执行您的查询
或者:
2)[如果您的驱动程序允许]使用两个PreparedStatements而不是直接在连接上执行查询。
我建议你养成使用准备好的陈述的习惯,除非你有充分的理由不这样做。与直接通过连接执行查询相比,它们具有各种优势。