在Java中将多个ResultSet合并到单个ResultSet中

假设我有多个ResultSet(每个resultSet都会引用数据库中的1行)(它们是同一个表。)。 现在我想创建合并的ResultSet,实习生将拥有所有其他resultSet。 所以我的主要目标是创建一个组合的ResultSet,它将指向以前由各个resultSet指向的所有行。

我正在使用Java。 有人知道我们能够实现这一目标吗?

编辑:我们正在使用java.sql.ResultSet

编辑:使其更清晰:

我想说

 List someResults ; // each resultSet Would point to a single row in database. 

我想创建一个合并的ResultSet finalResults;

psudo代码:

 List resultSets = // poppulated from code ResultSet rs = convert(resultSets) // psude conver method 

如果你在谈论java.sql.ResultSet,据我所知,这是不可能的。 我建议你改变你的查询。

或者,您可以将结果检索到java对象中,然后将所有对象组合到一个Collection中。

如果结果将来自同一个表,为什么不在查询本身中使用UNION/UNION ALL (根据您的需要)。

像这样的东西:

 select A, B from C where Q = R union select A, B from C where P = S 

或者,有很难迭代每个结果集并填充POJO并将它们添加到List/Set (根据您的需要)。 如果有很多结果集,这似乎是一种矫枉过正。

我会这样做

 class GatheringResultSet implements ResultSet { List resultSets; ResultSet current; GatheringResultSet(List resultSets) { this.resultSets = new ArrayList(resultSets); current = resultSets.remove(0); } @Override public boolean next() throws SQLException { if (current.next()) { return true; } if (resultSets.isEmpty()) { return false; } current = resultSets.remove(0); return true; } 

其余的方法只是委托调用当前的ResultSet

 public class ResultSets { private java.util.List resultSets; private java.sql.ResultSet current; @lombok.SneakyThrows public ResultSets(java.util.List resultSets) { this.resultSets = new java.util.ArrayList<>(resultSets); current = resultSets.remove(0); } @lombok.SneakyThrows public boolean next() { if (current.next()) { return true; }else if (!resultSets.isEmpty()) { current = resultSets.remove(0); return next(); } return false; } @lombok.SneakyThrows public int getInt(int pos){ return current.getInt(pos); } @lombok.SneakyThrows public String getString(String field){ return current.getString(field); } } 

用法: –

  @lombok.SneakyThrows public static void main(String ... args) { Connection conn = pe.getConnection("backup"); String sql1 = "SELECT count(distinct(User_Key)) FROM user_table"; String sql2 = "SELECT count(distinct(Username)) FROM user_table"; Statement stmt1 = conn.createStatement(); Statement stmt2 = conn.createStatement(); List resultSets = new ArrayList<>(); resultSets.add(stmt1.executeQuery(sql1)); resultSets.add(stmt2.executeQuery(sql2)); ResultSets rs = new ResultSets(resultSets); while(rs.next()){ System.out.println(rs.getInt(1)); } }