如果我使用Java查询,如何合并来自mssql数据库和mysql数据库的数据?

时间:2019-07-05 17:20:23

标签: java mysql sql-server database

我正在尝试对存储在两个单独的数据库中的数据进行一些分析,其中一个是mysql服务器,另一个是mssql。它们需要根据其中一列进行连接,这样我就可以得到一个数据结构。

我试图将数据分别存储到python中的pandas数据帧中,将它们加入pandas中,然后写入csv并将其重新加载到Java中。但这是很麻烦的事情,而且伸缩性也不是很好。

本质上,我有两个这样的查询:

MySQL

String myDriver = "org.gjt.mm.mysql.Driver";
String myUrl = "jdbc:mysql://localhost/test";
Class.forName(myDriver);
Connection conn = DriverManager.getConnection(myUrl, "root", "");
String query = "SELECT * FROM users";
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(query);

mssql

String url = "jdbc:msql://someMSsqlserver/";
Connection conn = DriverManager.getConnection(url,"","");
Statement stmt = conn.createStatement();
ResultSet rs;
rs = stmt.executeQuery("SELECT * FROM people");

我想让它们结合在一起成为一个数据结构。无论如何,这可以用Java本地完成吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试的各种策略:

  1. 使用Java程序在服务器A上创建一个临时表,然后从服务器B复制所需的数据(使用服务器B上的SELECT和服务器A上的INSERT)。然后在服务器A上执行适当的查询,以将该服务器上已经存在的表与临时表联接在一起。您可能有权在任一服务器上创建临时表。

  2. 如果您有权创建一个永久表,请在服务器A上使用该永久表。然后,只要使用一个Java程序进行了更改,就将数据从服务器B复制到服务器A,然后使用另一个Java程序查询它。

  3. 将数据从两个表中较小的一个插入到Java程序中的HashMap中,其中HashMap的键是join变量。然后从较大的表中逐行处理结果集,在HashMap中查找联接的条目。

  4. 切换到MariaDB并使用CONNECT存储引擎使SQL Server表可用于MySQL查询。

您如何选择策略?这取决于很多事情。您可以从DBA krewe获得多少合作?您的桌子有多大?您是否总是处理所有行,或者有时是子集? (您的示例查询没有WHERE子句,因此也许您正在处理所有内容。)您可以在JVM实例中获得足够的RAM来容纳整个表吗?您是否需要每小时一次或每周执行多次?每次您要花多少时间?

专业提示:对于类似示例的查询,请首先在两个服务器上都发出SQL命令SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;,这样就不会在您访问时阻止其他程序访问表检索结果集。

答案 1 :(得分:0)

您应该将结果映射到POJO Arraylist,然后合并它们。

您还可以将它们放在第三个数据库中,然后就可以执行任何SQL查询。