Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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进行查询,如何组合来自mssql数据库和mysql数据库的数据?_Java_Mysql_Sql Server_Database - Fatal编程技术网

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

如果我使用Java进行查询,如何组合来自mssql数据库和mysql数据库的数据?,java,mysql,sql-server,database,Java,Mysql,Sql Server,Database,我试图对存储在两个独立数据库中的数据进行一些分析,其中一个是mysql服务器,另一个是mssql。它们需要基于其中一列进行连接,这样我就得到了一个数据结构 我尝试将数据分别存储到python中的pandas数据帧中,将它们连接到pandas中,然后写入csv并将其加载回java。但这样做非常麻烦,而且扩展性不强 本质上,我有两个类似这样的问题: MySQL mssql 我希望将它们连接到一个数据结构中。是否可以在Java中以本机方式执行此操作?您可以尝试各种策略: 使用Java程序在服务器a上创

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

我尝试将数据分别存储到python中的pandas数据帧中,将它们连接到pandas中,然后写入csv并将其加载回java。但这样做非常麻烦,而且扩展性不强

本质上,我有两个类似这样的问题:

MySQL

mssql


我希望将它们连接到一个数据结构中。是否可以在Java中以本机方式执行此操作?

您可以尝试各种策略:

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

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

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

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

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


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

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


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

    不必手动在java中执行。您能将表从一个数据库复制到另一个数据库吗?我不可能获得这样做的权限。结果集可以以任何可行的方式组合吗?或者需要将它们转换为其他对象,然后使用它们吗?MySQL的MariaDB fork拥有一个连接存储引擎,这让人产生了一种错觉,即SQL Server上的表可用于MariaDB Server上的SQL查询。要使用它,您需要使用MariaDB、MariaDB的管理员访问权限和SQL Server数据库的ODBC样式的访问权限。“这是否可以用Java本机实现?”是的。现在读起来不容易。卷起袖子。
    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);
    
    String url = "jdbc:msql://someMSsqlserver/";
    Connection conn = DriverManager.getConnection(url,"","");
    Statement stmt = conn.createStatement();
    ResultSet rs;
    rs = stmt.executeQuery("SELECT * FROM people");