通过JDBC结合来自不同数据库的表

有没有办法将来自2(或更多)不同数据库/连接的2个(或更多)表结合起来?

到目前为止,我只能从数据库中导出一个表,而且这个工作正常:

private void populateWorksheet(Database db, Sheet sheet) { PreparedStatement preStmt; // An object that represents a precompiled SQL statement. See http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html ResultSet rsltSet; // A table of data representing a DB result set ResultSetMetaData meta; // An object that can be used to get information about the types and properties of the columns in a ResultSet object String columnName, data; Row headerRow, dataRow; Cell currHeaderCell, currDataCell; int columnCount, rowCount; // keep track of indices try { preStmt = db.getConnection().prepareStatement(columnsQuery); rsltSet = preStmt.executeQuery(); meta = rsltSet.getMetaData(); columnCount = meta.getColumnCount(); //Creating a Row for columns headings - starts with row 0 headerRow = sheet.createRow(HEADER_ROW_INDEX); //Get column headings and print them in Excel - on the first row for(int i = 1; i <= columnCount; i ++) { columnName = meta.getColumnName(i); currHeaderCell = headerRow.createCell(i - 1); currHeaderCell.setCellValue(columnName); } rowCount = FIRST_DATA_ROW_INDEX; // 1st row after the header row (data/record starts here) while(rsltSet.next()) { dataRow = sheet.createRow(rowCount); for(int i = 1; i <= columnCount; i ++) { data = rsltSet.getString(i); currDataCell = dataRow.createCell(i - 1); currDataCell.setCellValue(data); } rowCount ++; } } catch (SQLException e) { e.printStackTrace(); } } 

但是,如果我的应用程序连接到DatabaseA和DatabaseB,并且我想要从DatabaseA内部连接TableA和从DatabaseB连接TableB,并将结果传送到Excel文件,会出现什么情况呢? 我如何去做这件事?

编辑:而如果数据库在不同的服务器?

如果数据库驻留在相同的数据库服务器中, 并且您的用户同时拥有权限,则可以执行类似的操作

Mysql的

  SELECT * FROM db1.table1 A INNER JOIN db2.table2 B ON A.col = B.col 

SQL-Server (默认模式dbo

  SELECT * FROM db1.dbo.table1 A INNER JOIN db2.dbo.table2 B ON A.col = B.col 

在数据库驻留在不同的服务器上的情况下,您的选项更加有限。

对于SQL Server,你可以添加一个“链接服务器” – 允许通过linkname...table访问。