Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从两个数据库中选择唯一的数据_Java_Database - Fatal编程技术网

Java 如何从两个数据库中选择唯一的数据

Java 如何从两个数据库中选择唯一的数据,java,database,Java,Database,我有两个数据库;数据库A和数据库B。数据库A位于我的计算机中,数据库B位于在线服务器中。这两个数据库包含具有相同数据类型的相同表,但数据库A将包含比数据库B更多的数据。我想从数据库A中选择所有唯一的数据 数据库A表A 数据库B表A 我想选择: 2 | Alice | B 3 | Bob | C 我如何才能做到这一点?选项1 好的,这样做很无聊(也很难)的方法是向不同的数据库发出不同的SQL查询,然后编写一堆java来比较结果。这完全可以做到,但哎哟 如果您需要

我有两个数据库;数据库A和数据库B。数据库A位于我的计算机中,数据库B位于在线服务器中。这两个数据库包含具有相同数据类型的相同表,但数据库A将包含比数据库B更多的数据。我想从数据库A中选择所有唯一的数据

数据库A表A

数据库B表A

我想选择:

2   | Alice      | B
3   | Bob        | C 

我如何才能做到这一点?

选项1

好的,这样做很无聊(也很难)的方法是向不同的数据库发出不同的SQL查询,然后编写一堆java来比较结果。这完全可以做到,但哎哟

如果您需要定期执行此类操作,那么应该使用联邦数据库或虚拟数据库工具。基本上,这些工具所做的就是创建一个虚拟的“uber数据库”,其中包含您需要在其中查询的两个数据库。因此,您可以连接到虚拟数据库并发出与这两个数据库都不一致的SQL查询

一个简单的例子是。如果你四处搜索,也会有其他人,比如

然后,您只需要针对这两个数据库编写一个SQL查询,它将为您提供所需的内容,即

在UnityJDBC中,可能是这样的:

SELECT ID, FName, Lname
FROM Database_A.TableA, Database_B.TableB
LEFT JOIN Database_B.TableB ON Database_A.TableA.ID = Database_B.TableB.ID;
这个查询并没有那么复杂,但它只有在使用虚拟数据库层的情况下才有可能实现

选项2


使用提取、转换和加载工具(如)将数据从一个提取到另一个。您可以使用GUI应用程序来执行此操作,也可以使用他们的开源java库并将其构建到您的应用程序中。

如果您只需要执行一次,并且数据不会太大

  • 将两个表导出到CSV的
  • 把它们放在同一个盒子里
  • 使用grep查找A中不在B中的列

    grep-vf DB_B_Table_A.csv DB_A_Table_A.csv


您只需将所有数据从本地数据库发送到远程数据库并由其决定即可。然而,这是非常不够的,你有什么限制?这个操作会经常发生吗?如果您的服务器类型允许,您可以链接两个服务器。例如:然后通过一个查询可以链接两个表。在使用MS Access链接表之前,我已经这样做了,这是一种在给定链接中突出显示的方法,可以替代使用其产品。因此,如果您在Windows上运行,并且具有MS Access…..实际上,我想做的是在用户单击按钮的一天结束时,使用数据库A中的数据更新数据库B。除此之外,他们的方法是否简单?请参阅更新的答案。我不知道你说的“简单方式”是什么意思。您可以像我在选项1的第一段中所说的那样编写一堆java代码,但我认为从长远来看这不会更简单。我试图提出一些重用现有优秀软件的建议,而不是建议您编写更多自己的软件。学习其他软件需要时间,但它的痛苦要小得多,出现错误的可能性也要小得多。如果idea保持数据库A和数据库B的数据相同,您对联邦表有何看法?联邦表可能很慢,但这是因为您正在通过网络传输数据并将其与其他数据进行比较。值得指出的是,OP必须这样做才能解决这个问题。唯一的问题是OP是否会自己重新实现它,或者重用代码来做同样的事情。发出两个单独的查询,然后在客户机上执行java代码连接,这真的更好吗;这个答案需要大量的手工工作,并且假设是UNIX。在java应用程序中吞下这个功能可能会很混乱。True,True,但OP标记了这个java和数据库。实际上有无数种方法可以做到这一点,包括使用Ruby或任何其他技术。问题和标记的提出基本上假定了java和数据库,而不是shell、MS Access、CSV、Ruby或(这里有1000个其他选项)。
2   | Alice      | B
3   | Bob        | C 
SELECT ID, FName, Lname
FROM Database_A.TableA, Database_B.TableB
LEFT JOIN Database_B.TableB ON Database_A.TableA.ID = Database_B.TableB.ID;