0

是否可以连接两个 ResultSet,例如在 Java-oracle 编程中连接两个表?我正在编写一个查询两个不同的 oracle 数据库的 java 程序(数据库物理上位于不同的位置)。程序中sql1返回ResultSet ret1;sql2返回ResultSet ret2。假设 ret1 有以下数据:

Id   item
------------
1   item1
2   item 2
3   item 3
.........

Ret2有以下数据

Id  info
---------
1  info1
2  info2
…

我需要这样的结果

Id item info
----------------------
1   item1 info1
2   item2  info2

我可以在java中做这样的事情吗:

Select ret1.id,ret1.item,ret2,info from ret1, ret2 where ret1.id=ret2.id

我知道我可以从 ret1 循环并获取 id 然后从 ret2 获取信息;我想知道是否有一种快速的方法,比如加入两个表来加入两个结果集而不循环?实际上这两个结果都有 50 万行。谢谢!

4

6 回答 6

1

你可以尝试这样的事情:

 SELECT ret1.id,ret1.item,ret2.info
FROM ret1
RIGHT JOIN ret2 
ON ret1.id=ret2.id;

Sql 小提琴示例

编辑:

如果这两个 ResultSet 来自同一个数据库,那么在检索过程中为什么不使用 union 将它们组合起来呢?例如

select A, B
from C
union
select A, B
from D
于 2012-09-19T18:43:02.073 回答
0

您可以做的最好的事情是遍历结果集ret1ret2Java 并 id在两者中进行比较,然后将结果存储在多维数组中,例如 -

  while (ret1.next()) {
        int id1 = rs.getInt("ID"); 
        while (ret2.next()){
               int id2 = rs.getInt("ID");
               if ( id1 == id2 )
               ...  
               ...
        }
  }

正如其他人所说,更好的方法是使用dblinks. 正如汤姆·凯特所说——

您编写的代码越少,创建
的错误就越少 您编写的代码越多,您创建的错误越多
编写的代码越少,遇到的错误越少
编写的代码越多,遇到的错误越多

于 2012-09-19T19:00:06.490 回答
0

最干净和更有效的解决方案是从一个数据库到另一个数据库的 dblink 并在查询中进行连接。否则,您必须遍历两个结果集。

于 2012-09-19T19:03:04.337 回答
0

您的预期输出是某种类型的 bean 还是其他 java 数据结构?
假设它是并且您正在使用commons dbutils来填充 javabean。
我将使用 BeanListHandler 创建一个 ret1 类型的 bean 列表然后在 ret2 上使用BeanMapHandler以从 ret2 获取以映射键为 id 的 bean 映射。
然后,当您遍历 ret1 时,您可以通过 ret1 的 id 访问 ret2 中的值。
希望这是有道理的。

于 2012-09-19T19:10:08.013 回答
0

您需要使用DB Link来满足您的要求。

或者您可以尝试使用物化视图。

于 2012-09-21T03:15:56.947 回答
0

由于权限问题,不允许创建 dblink。我终于找到了另一个解决方案。这是我正在做的事情:我得到结果集 ret1 然后使用:

while (ret1.next()) { 
  get id from ret1, 
  query  info from another database;
  bla,bla,...
}
....

The performance is much better than getting two resultsets then looping one inside another...

于 2012-09-21T20:46:41.810 回答