Java 如何在一个查询中从多个数据库检索数据?

Java 如何在一个查询中从多个数据库检索数据?,java,sql-server,database,jdbc,connectivity,Java,Sql Server,Database,Jdbc,Connectivity,如果我有多个具有相同表和列的数据库,如何使用Java中的单个查询从这些数据库检索数据。 为单个数据库完成此操作,我是java新手,请建议 public class MultipleDBTest{ public void dbConnect(String db_connect_string, String db_userid, String db_password){ try{ Class.forName("com.microsoft.sqlserver.jdbc.S

如果我有多个具有相同表和列的数据库,如何使用Java中的单个查询从这些数据库检索数据。 为单个数据库完成此操作,我是java新手,请建议

public class MultipleDBTest{
   public void dbConnect(String db_connect_string, String db_userid, String db_password){
     try{
       Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
       Connection conn = DriverManager.getConnection(db_connect_string, db_userid, db_password);
       System.out.println("connected");
       Statement statement = conn.createStatement();
       String queryString = "select <Col1>, <Col2> from <Table>";
       ResultSet rs = statement.executeQuery(queryString);
        while(rs.next()){
          System.out.println(rs.getString(1) + " | " + rs.getString(2));
        }
      }
      catch(Exception e){
        e.printStackTrace();
      }
  }

  public static void main(String[] args){
    ConnectMSSQLServer connServer = new ConnectMSSQLServer();
    connServer.dbConnect("jdbc:sqlserver://localhost;databaseName=<Database1>","<Username>","<Password>");
  }
}
public class MultipleDBTest{
public void dbConnect(字符串db\u connect\u String、字符串db\u userid、字符串db\u password){
试一试{
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);
Connection conn=DriverManager.getConnection(数据库连接字符串、数据库用户标识、数据库密码);
System.out.println(“已连接”);
语句Statement=conn.createStatement();
String queryString=“选择,从”;
ResultSet rs=语句.executeQuery(查询字符串);
while(rs.next()){
System.out.println(rs.getString(1)+“|”+rs.getString(2));
}
}
捕获(例外e){
e、 printStackTrace();
}
}
公共静态void main(字符串[]args){
ConnectMSSQLServer connServer=新的ConnectMSSQLServer();
connServer.dbConnect(“jdbc:sqlserver://localhost;databaseName=“,”“,”);
}
}

让Sql Server为您完成这项工作。在其中一个数据库中创建一个视图,该视图引用其他数据库中表中的数据。这样,您的代码只需要访问一个数据库中的一个对象,即视图


如果数据库在同一台服务器上,这是最简单的。如果数据库位于不同的服务器上,则需要链接它们。

从多个服务器获取数据的最简单方法是链接它们,使用完全限定的表名(即
Server.Database.Schema.table)查询每个表中的数据,并将所有数据合并

如果您将其他服务器链接到进行查询的服务器,您只能在完全限定的名称中指定所需的服务器,
server

你最终会得到这样的结果

select * from Server1.Database1.dbo.Table
  union
select * from Server2.Database2.dbo.Table
  union
select * from Server3.Database2.dbo.Table
请参阅本文以了解什么是链接服务器以及如何设置它们:。

如果“多个数据库”是指同一数据库中的多个架构,则可以使用架构名称并进行连接。另外,请确保您有足够的权限读取这两个架构。SQL查询的形式如下:

select S1T1.Col1, S1T1.Col2, S2T1.Col1, S2T1.Col2 
from Schema1.T1 S1T1, Schema2.T1 S2T1
where S1T1.Col1=S2T1.Col1
如果您指的是不同数据库实例上的多个数据库,那么您可能必须在数据库实例之间创建链接。有关更多信息,请参阅本SO帖子:


如果信息有用,别忘了投票。谢谢!:)

引用表时使用Database.Schema.Table

引用列时使用Database.Schema.Table.Column

您可以通过这种方式在数据库之间写入联接,并从多个数据库中最终提取数据

USE [DatabaseA]



SELECT * FROM DatabaseA.dbo.DSNA_tblMaiin

INNER JOIN DatabaseB.dbo.DSNB_tblMaiin ON DatabaseA.dbo.DSNA_tblMaiin.Serialnumber = DatabaseB.dbo.DSNB_tblMaiin.Serialnumber

INNER JOIN DatabaseB.dbo.DSNC_tblMaiin ON DatabaseA.dbo.DSNA_tblMaiin.Serialnumber = DatabaseC.dbo.DSNC_tblMaiin.Serialnumber

你要找的是联邦层。该层将解析SQL,并创建每个DB的查询。这些独立的查询将在DB上激发,结果将基于where子句连接。网络上有一些基于Antlr的SQL语法,因此您可以使用它们来解析SQL并生成特定于DB的SQL。

您需要连接到每个数据库并查询它。您需要的不是jdbc解决方案。您需要数据库供应商的支持。@Jayan没有jdbc解决方案吗?您不能。创建包含要检索的列的Java数据访问类。分别从每个数据库检索行,创建数据访问对象列表。在Java中组合这些列表以创建一个数据访问对象的主列表。嗨,JotaBe,我如何找到服务器名称?Mmmm???如果您不知道服务器的名称,如何访问服务器?如何链接它们?我得到了服务器名“RIK-PC\SQLEXPRESS”,但它显示了“\”的错误。在执行查询之前,您需要将其他服务器链接到您的服务器。链接它们时,可以定义链接服务器的名称。但是,如果您使用的是特殊字符,请使用方括号,即
[RIC-PC\SQLEXPRESS]
它适用于多个数据库