【问题标题】:Combining tables from different databases through JDBC通过 JDBC 组合来自不同数据库的表
【发布时间】:2016-01-14 15:25:23
【问题描述】:

有没有办法从 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 文件,该怎么办。我该怎么做呢?

编辑:如果数据库在不同的服务器上怎么办?

【问题讨论】:

  • 您不能直接这样做,您需要查询两个数据源并在代码中“加入”它们。或者使用可以连接到其他数据库服务器的数据库服务器。
  • 感谢您的回复。我如何在代码中“加入”它们?
  • 您使用的是哪个 RDBMS?至少 Oracle 支持在同一查询中连接通过数据库链接访问的本地表和远程表中的数据。
  • 我被要求对来自不同数据库的表进行内部连接。可能来自 Oracle、Access 甚至 SAS 数据集。

标签: database excel jdbc


【解决方案1】:

如果数据库位于同一个数据库服务器中并且您的用户在两者中都具有权限,您可以做类似的事情

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 进行访问。

【讨论】:

  • 是的,这很有帮助。但是如果他们在不同的服务器上呢?
  • 查看我的编辑 - 你可以在那里做的不多。除了可能将表导入内存/临时数据库,然后针对它运行您的查询。
  • 既然我还是将列导出到 Excel,那么在从另一个数据库导出表/选定列时继续编辑同一个工作簿是否是个好主意?
猜你喜欢
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多