如果我有多个具有相同表和列的数据库,我如何使用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>");
}
}
答案 0 :(得分:2)
从多个服务器获取数据的最简单方法是链接它们,使用完全限定的表名称查询每个表中的数据,即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)。
答案 1 :(得分:0)
让Sql Server为您完成工作。在其中一个数据库中创建一个视图,该数据库引用其他数据库中表的数据。这样,您的代码只需要访问一个数据库中的一个对象即视图。
如果数据库位于同一服务器上,这是最简单的。如果数据库位于不同的服务器上,则需要将它们链接起来。
答案 2 :(得分:0)
如果通过&#34;多个数据库&#34; - 您指的是同一数据库中的多个模式,然后您可以使用模式名称并进行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
如果信息有所帮助,请不要忘记投票。谢谢! :)
答案 3 :(得分:0)
引用表时的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
答案 4 :(得分:-1)
您正在寻找的是联邦层。该层将解析SQL,将创建每个数据库的查询。这些独立查询将在数据库上触发,结果将基于where子句连接。网上有一些基于Antlr的SQL语法,因此您可以使用它们来解析SQL并生成特定于数据库的SQL。