如何在java中连接oracle查询的两个结果集

如何在java中连接oracle查询的两个结果集,java,oracle,jakarta-ee,Java,Oracle,Jakarta Ee,在Java oracle编程中是否可以像连接两个表那样连接两个结果集?我正在编写一个java程序,它查询两个不同的oracle数据库(数据库在物理上位于不同的位置)。在程序中,sql1返回ResultSet ret1;sql2返回结果集ret2。假设ret1具有以下数据: Id item ------------ 1 item1 2 item 2 3 item 3 ......... Ret2具有以下数据 Id info --------- 1 info1 2 info2

在Java oracle编程中是否可以像连接两个表那样连接两个结果集?我正在编写一个java程序,它查询两个不同的oracle数据库(数据库在物理上位于不同的位置)。在程序中,sql1返回ResultSet ret1;sql2返回结果集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万行。谢谢大家!

您可以尝试以下方法:

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

编辑:

如果两个结果集来自同一个数据库,那么为什么不在检索过程中使用union将它们合并;e、 g

select A, B
from C
union
select A, B
from D

您所能做的最好的事情是在Java中循环遍历两个结果集
ret1
ret2
,比较这两个结果集中的
id
,然后将结果存储在多维数组中,如-

  while (ret1.next()) {
        int id1 = rs.getInt("ID"); 
        while (ret2.next()){
               int id2 = rs.getInt("ID");
               if ( id1 == id2 )
               ...  
               ...
        }
  }
正如其他人所说,更好的方法是使用
dblinks
。正如Tom Kyte所说-

编写的代码越少,产生的bug就越少
编写的代码越多,产生的bug就越多
编写更少的代码,遭受更少的错误
写更多的代码,遭受更多的错误


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

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

您需要根据自己的需求使用


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

由于权限问题,不允许创建dblink。我终于找到了另一个解决办法。下面是我正在做的:我使用以下方法获得resultset ret1:

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

性能要比获得两个结果集然后在另一个结果集中循环好得多…

我可以用Java实现吗?ret1和ret2都是结果集类型。非常感谢。您正在从同一数据库中检索两个结果集吗?否,结果来自物理上位于不同位置的两个不同数据库。是否在这两个数据库之间设置了任何dblinks?否,我没有dblinks。实际上,我需要使用jdbc连接两个数据库。我可以看到,在两个大的集合上,自制的嵌套循环代码将永远占用时间。我同意dblinks是首选的(让db完成繁重的数据工作,让java完成漂亮/轻松的工作;-)