首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

利用 Jakarta POI 從多個 Oracle 資料庫產生整合 Excel 報表

     編輯:Oracle 資料庫基礎

前言:整合異構資料的報表需求

Microsoft Excel 憑藉其豐富的格式化功能(字體、多工作表)與廣泛的商業應用普及度,成為資料呈現的首選格式。雖然 Excel 能讀取 CSV 等分隔檔案,但專屬的 .xls 格式能提供更強的表現力。在企業環境中,常需從多個 Oracle 資料庫撈取資料並彙整成單一試算表,以利比對分析。常見情境包括:DBA 比較多庫配置、開發人員核對 PL/SQL 物件版本、資料遷移進度評估、測試與正式環境資料比對等。

解決方案架構

本文示範以 Java、JDBC 與 Apache Jakarta POI 開源庫,打造一套可依 XML 設定檔連線多個 Oracle 資料庫、執行同一 SQL 查詢、並將各庫結果分別輸出至同一 Excel 活頁簿的不同工作表的工具程式。核心需求如下:

  • 支援一對多資料庫連線與單一 SQL 查詢定義
  • 採 XML 格式儲存連線參數與查詢語句
  • 每個資料庫結果對應一個工作表,工作表命名規則為 ServerName-SID
  • 欄位標題自動以粗體顯示
  • 使用 JDBC 存取資料庫,POI HSSF API 產生 .xls 檔案

環境建置與依賴

執行環境

開發測試環境:JRE 1.4.2 / Windows 2000。Java 跨平台特性使其可在任何支援相容 JRE 的作業系統上執行。JRE 1.4 內建 XML 處理 API(JAXP),無需額外引入 Xerces、Xalan 等外部庫。

關鍵 JAR 檔與 CLASSPATH 設定

必須在 CLASSPATH 中包含以下兩個核心 JAR:

  1. Oracle JDBC 驅動:classes12.jar(通常位於 $ORACLE_HOME/jdbc/lib 或可從 OTN 下載)。缺少時會拋出 ClassNotFoundException: oracle.jdbc.driver.OracleDriver。
  2. Jakarta POI:poi-2.5.1-final-20040804.jar。缺少時會拋出 NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook。

專案提供 run.bat(Windows)與 run.sh(Linux)腳本設定環境變數,並打包成 broadcast.jar 執行。

XML 設定檔結構

採用階層式 XML 描述多資料庫連線與單一查詢,範例:

<BROADCAST>
  <CONNECTION-CONFIG>
    <DATABASE>
      <SERVER-NAME>server001</SERVER-NAME>
      <PORT>1521</PORT>
      <SID>ORCL</SID>
      <USERNAME>sysdba</USERNAME>
      <PASSWORD>my1manager</PASSWORD>
    </DATABASE>
    <DATABASE>
      <SERVER-NAME>server002</SERVER-NAME>
      <PORT>1521</PORT>
      <SID>PROD</SID>
      <USERNAME>sysdba</USERNAME>
      <PASSWORD>my1manager</PASSWORD>
    </DATABASE>
  </CONNECTION-CONFIG>
  <SQL-STATEMENT>select * from v$parameter</SQL-STATEMENT>
</BROADCAST>

XMLConfigVO 類別使用 DocumentBuilderFactory 解析 XML,透過 XPath(//broadcast/connection-config/database、//broadcast/sql-statement)提取節點值,供後續流程使用。

JDBC 連線與資料擷取

OracleConnectionVO 封裝 JDBC 連線參數:驅動類別 oracle.jdbc.driver.OracleDriver、URL 格式 jdbc:oracle:thin:@<host>:<port>:<SID>。程式逐一建立連線、執行查詢、取得 ResultSet 與 ResultSetMetaData(用於取得欄位名稱與數量)。

POI 產生 Excel 核心邏輯

建立活頁簿與工作表

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet(sheetName); // sheetName = ServerName-SID

設定標題列粗體樣式

HSSFFont boldFont = wb.createFont();
boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
HSSFCellStyle boldStyle = wb.createCellStyle();
boldStyle.setFont(boldFont);

寫入欄位標題與資料列

迭代 ResultSetMetaData 寫入標題列並套用 boldStyle;接著逐列讀取 ResultSet,嘗試以 Long 型別寫入儲存格,若擲出 NumberFormatException 則改用 toString() 寫入字串,確保任意資料型別皆能正確輸出。

輸出檔案

FileOutputStream out = new FileOutputStream("output.xls");
wb.write(out);
out.close();

實用查詢範例

將下列查詢置入 config.XML 即可快速產出比對報表:

  • 資料庫基本資訊:SELECT * FROM v$database
  • 版本資訊彙總:SELECT 'Name: '||name FROM v$database UNION ALL SELECT 'DBID: '||dbid FROM v$database UNION ALL SELECT * FROM v$version
  • 關鍵檔案位置:控制檔、重做日誌、資料檔路徑查詢
  • RMAN 備份狀態:SELECT * FROM V$BACKUP_SET 或 V$RMAN_CONFIGURATION
  • Oracle Applications 已套用修補程式:SELECT * FROM APPLSYS.AD_APPLIED_PATCHES ORDER BY PATCH_NAME

結語與擴充方向

本工具展示了 Java 生態系成熟 API(JDBC、POI、JAXP)快速構建實用工具的能力。實務部署時可進一步強化:密碼加密、支援 BLOB/CLOB/LONG 型別、提供 GUI 介面、完善錯誤處理與日誌記錄、支援多查詢批次執行等。將多庫資料匯聚於單一 Excel 檔,極大簡化了跨資料庫比對分析的工作流程。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved