如何在单个查询中从多个数据库中检索数据?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在单个查询中从多个数据库中检索数据?相关的知识,希望对你有一定的参考价值。
如果我有多个具有相同表和列的数据库,我如何使用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>");
}
}
从多个服务器获取数据的最简单方法是链接它们,使用完全限定的表名称查询每个表中的数据,即Server.Database.Schema.Table
,并使所有数据联合起来。
如果您将其他服务器链接到您正在进行查询的服务器,则Yo只能在完全限定名称Server
中指定所需的服务器。
你最终会得到这样的东西
select * from Server1.Database1.dbo.Table
union
select * from Server2.Database2.dbo.Table
union
select * from Server3.Database2.dbo.Table
请参阅此文章,了解链接服务器的内容以及设置方式:Linked Servers (Database Engine)。
让Sql Server为您完成工作。在其中一个数据库中创建一个视图,该数据库引用其他数据库中表的数据。这样,您的代码只需访问一个数据库中的一个对象即视图。
如果数据库位于同一服务器上,这是最简单的。如果数据库位于不同的服务器上,则需要链接它们。
如果通过“多个数据库” - 您指的是同一数据库中的多个模式,则可以使用模式名称并进行JOIN。另外,请确保您具有足够的权限来读取这两个模式。 SQL查询的形式如下:
select S1T1.Col1, S1T1.Col2, S2T1.Col1, S2T1.Col2
from Schema1.T1 S1T1, Schema2.T1 S2T1
where S1T1.Col1=S2T1.Col1
如果您指的是不同数据库实例上的多个数据库,那么您可能必须在数据库实例之间创建链接。有关更多信息,请参阅此SO帖子:Querying data by joining two tables in two database on different servers
如果信息有所帮助,请不要忘记投票。谢谢! :)
引用表时的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上被触发,结果将根据where子句加入。网上有一些基于Antlr的SQL语法,因此您可以使用它们来解析SQL并生成特定于数据库的SQL。
以上是关于如何在单个查询中从多个数据库中检索数据?的主要内容,如果未能解决你的问题,请参考以下文章