微軟的 Excel 電子表格廣泛應用于當今的商業環境中 盡管 Excel 能夠讀取和顯示分隔文件 但 xls 專有格式提供了其他一些富于表現力的特性 其中包括字體格式和多工作表電子表格
創新互聯專注于盤州企業網站建設,響應式網站設計,商城網站定制開發。盤州網站建設公司,為盤州等地區提供建站服務。全流程定制網站設計,專業設計,全程項目跟蹤,創新互聯專業和態度為您提供的服務
許多商業和開放源代碼的工具都提供了生成可由 Excel 讀取的報表的功能 比如 您可以使用 Oracle Reports 生成一個電子表格 或使用 SQL*Plus 輸出一個由逗號分隔的文件 利用現有的一些工具可以訪問多個數據源 但報表的格式與特定查詢的結果緊密聯系 而不同的數據源有時會生成不同的結果 (比如 對兩個不同數據庫中的表進行 SELECT * FROM emp 查詢 返回來的列的數量和類型將必然不同 ) 出于各種各樣的原因 您可能要訪問幾個不同的數據源 然后在一個電子表格中整理返回的結果
數據庫管理員可能希望比較不同數據庫的配置
應用開發人員可能需要檢查不同數據庫中 PL/SQL 對象的版本
在數據庫間移植數據時 數據庫管理員可能需要估計作業的進度
程序員使用測試數據庫調試應用程序時 可能需要將當前數據與生產環境中的數據進行比較
根據數據庫的不同結構和用途 可能還有其它原因促使您想要生成此類電子表格 但所有原因都依賴于數據庫的功能要求和定義
本文將說明如何使用 Apache Jakarta POI 開放源代碼項目從幾個不同數據源生成一個電子表格 工作簿中的每一個工作表將顯示從某個給定 Oracle 數據庫返回的結果 在當前項目中您要達到的要求是
運行該軟件創建一個包含從一個或多個 Oracle 數據庫獲得的數據的電子表格
用戶將定義一個隨意 SQL 查詢 然后由各個配置的數據庫處理該查詢
用戶將定義一個或多個數據庫連接
生成一個配置文件 其中包括您定義的數據連接和 SQL 查詢
該配置文件的格式為 XML 格式
將生成一個工作表顯示每個數據庫返回的結果
將依據服務器名稱和 Oracle 系統標識符(又稱為 Oracle SID)命名每個工作表
電子表格將以粗體顯示列標題(基于數據庫列)
該軟件將用 Java 編寫
將使用 JDBC 訪問數據庫
將使用 Jakarta POI 生成電子表格
您可以為生產系統添加許多要求 很明顯 上面的列表中遺漏了口令加密方面的內容 雖然現在已經能夠處理 SQL 數據類型 但是一個更健全的解決方案還應該能夠處理一些特殊的數據類型 如 BLOB(二進制大對象) CLOB(字符大對象)和 LONG 目前只能調用一個 XML 配置文件和一個腳本來設置環境和執行 Java 類 還未提供易于使用的圖形界面 由于只執行一個查詢 因此必須保證該 SQL 查詢無語法錯誤 并基于每個數據庫的對象返回一個結果集 且記錄的內容非常少 盡管如此 如果程序達到了上面的要求 那么該程序還是相對容易使用的 并且它能夠快速生成包含許多數據庫數據的文檔 如果需要 還可以使用 Excel 編輯該文檔的格式 因為將多個數據源的數據納入了一個電子表格中 所以我們可以很方便對從各數據庫提取的數據進行比較了 此外 您使用的主要機制即 POI 應用程序編程接口 (API) 調用清晰可辨 而不會被構建一個功能齊備的解決方案所需的其他代碼和資源所淹沒
測試和要求
本文所生成的軟件是在安裝有 Java 運行時環境 (JRE) 運行 Windows 系統的 PC 機上編寫和測試完成的 (要了解 JRE 相關的問題 參見邊欄) Java 的設計初衷就是實現平臺無關性 所以在任何安裝有適當 JRE 的機器上都應該能正常運行 使用該版本的 JRE 您無需訪問其他外部 API(如 Xerces 和 Xalan)就能利用 XML 處理
初始配置
如果系統中有幾種 JRE 那么必須確保正確設置 PATH 環境變量 以調用 或更新版本的 JRE 而非老版本的 JRE 可在 /j se/ /docs/api 中 獲取 JRE 版的 Javadoc 文檔
該軟件下載中包含的批處理文件中的信息已經進行過更改 可用于 Linux 環境 而且這些信息已經在 Red Hat Linux 上測試通過 只是對 run sh 進行了適當的修改 并沒有更改并執行 run bat 在 Linux 環境中 可使用 的電子表格程序來顯示電子表格
環境設置基本上就是兩個環境變量的設置 PATH 和 CLASSPATH 首先要正確設置 CLASSPATH 以利用提供數據庫訪問和 Excel 電子表格功能的 API 使用 run bat 文件設置這一變量 這樣就可以訪問相應的 Java 文檔( jar 文件) 您可能需要將指向 classes jar(其中包含 Oracle JDBC 驅動)的路徑更改您系統上的正確路徑 在安裝許多不同的 Oracle 產品時都將自動安裝該文件 如果您系統中沒有該文件 本文前面提供有文件的下載鏈接 如果 CLASSPATH 不包含這一 jar 當程序試圖載入 JDBC 驅動時 會出現錯誤
Driver not found: oracle jdbc driver OracleDriver java lang ClassNotFoundException: oracle jdbc driver OracleDriver
下載的文件中有一個 lib 目錄 其中包含有 POI jar (poi final jar) 如果 CLASSPATH 不包含這一文件 當程序試圖創建一個工作表對象時 將出現以下錯誤
Exception in thread main java lang NoClassDefFoundError: /apache/poi/hssf/usermodel/HSSFWorkbook
The broadcast jar 包含有一些文件 利用它們可以集中這些 API 的功能 然后基于配置的連接和 SQL 查詢來 構建電子表格 配置文件 (config xml) 應該位于執行 broadcast jar 的目錄中 如果不是 將出現錯誤(文件系統路徑正確)
java io FileNotFoundException: C:\config xml (The system cannot find the file specified)
XML 配置
從 版本起 用于 XML 處理的 Java API 就已經加入了 Java 平臺中 利用該 API 可通過一系列標準的 Java 平臺 API 來處理 XML 文檔 因此 當前項目也就無需另外添加 XML 處理包了 只使用一個簡單的配置文件就可以配置一個 SQL 查詢和多個數據庫連接
XML 格式極其適用于配置文件 它使得配置數據易于您理解 可以通過標準的處理方法來順利訪問配置數據 因為存儲在配置文件中的數據很有限 也就不需要擔心出現 file bloat 的情況 當使用 XML 標記符來標記大量數據時 會出現 file bloat 此外 the hierarchical anization of our configuration data benefits from the anization allowed for through nesting entities in XML 每個連接節點包含單一的數據 合用后就可以創建一個數據庫連接
下面是一個配置文件的示例
?xml version= ? broadcast connection config database server nameserver /server name| port /port sidORCL/sid usernamesysdba/username passwordmy manager/password /database database server nameserver /server name| port /port sidPROD/sid usernamesysdba/username passwordmy manager/password /database /connection config sql statementselect * from v$parameter/sql statement /broadcast
XMLConfigVO 類包含與讀取和分析該 XML 文檔的代碼 調用沒有參數的構造器后 類將讀取 config xml 文件并創建一個新的 DocumentBuilderFactory實例 本例沒有使用 DTD(文檔類型定義)或模式驗證 該廠生成了一個可供分析的文檔對象 如果需要 還可操作該文檔
接下來將選擇與 //broadcast/connection config/database XPath 表達式的節點 這些節點包含創建數據庫連接所需的元素 服務器名端口 Oracle SID 您名和密碼 最后 將使用//broadcast/sql statement XPath 表達式進行查詢 以獲取 SQL 語句 至此 利用存取器(getter 方法 其形式為 getXXXX())可以從 XMLConfigVO取回所有數據
使用 JDBC
Java 數據庫連接性 (JDBC) technology 是一個 Java API 它向 Oracle 數據庫提供連接能力 以取回數據 用于填充電子表格 JDBC API 還有一個特別之處 利用它還可在 Oracle 數據庫間建立連接 用于發送 SQL 語句并處理結果 本文中的程序只使用了這一 API 的部分功能 因為不需要執行 DML 或設置事務處理 盡管支持所有類型的數據庫 但這里我們要將處理限定到一個范圍內 該范圍內可清晰地映射到 Excel 電子表格
Oracle JDBC 驅動依賴于 tnsnames ora 或其他標準的 Oracle 客戶連接信息 只要系統中有 JRE 且 Oracle JDBC 驅動類存在于 CLASSPATH (且網絡中有數據庫) 那么 Java 類就有足夠的資源來創建到 Oracle 數據庫連接
classes jar 包含 Oracle 專用的 JDBC 驅動和類 它們也是本項目必須的要件 它應該包含在 CLASSPATH 中 這樣您才能夠運行該程序 你一般可以須 /jdbc/lib 找到該文件 你也可以從 OTN 中下載 該文件
OracleConnectionVO 類包含與 JDBC 連接相關的信息和處理 oracle jdbc driver OracleDriver 將是一個 URL 其形式為 jdbc:oracle:thin:@ :@ :@ 將通過它來創建連接
Jakarata POI
正如我在 以前的文章中所述 Jakarta POI FileSystem API 以純 Java 方式實施 OLE 復合文檔格式 且通過 HSSF API 可以用 Java 來讀寫 Excel 文件 在該篇文章中 使用了這一 API 來讀取 Excel 文件 這里我們將使用它來寫一個 Excel 文件 (POI 也為您提供了打開已有的電子表格并對它進行操作的功能) 如果你想了解 POI 的列多功能 請參見 HSSF 特性指南 其中提供有代碼實例 演示了開發人員經常需要的功能
要創建一個工作表對象 調用以下代碼(在 BroadcastDriver 類)
HSSFWorkbook wb = new HSSFWorkbook(fs);
在 POISheetGenerator 類完成調用 以創建工作表 然后它加入工作表中
HSSFSheet sheet = wb createSheet(sheetname);
列標題的字體為粗體 配置如下
HSSFFont boldFont = wb createFont(); boldFont setBoldweight(HSSFFont BOLDWEIGHT_BOLD); HSSFCellStyle boldStyle = wb createCellStyle(); boldStyle setFont(boldFont);
在與迭代與結果集相關的列時 將應用上面定義的單元格格式
row getCell((short) x) setCellStyle(boldStyle);
要將工作表寫入磁盤中 調用以下代碼
OutputStream = new FileOutputStream( output xls ); wb write(out); out close(); broadcast jar
broadcast jar 包含了組成項目本身的類
BroadcastDriver BroadcastDriver 包含了用于這一應用程序的主要方法 創建 HSSFWorkbook() 對象 該對象用于容納所有的工作表 然后創建 XMLConfigVO 對象 該對象用于從 config xml 中讀取連接和 SQL 查詢 使用該對象中包含的信息 應用程序將迭代每個 OracleConnectionVO 并設置 JDBC 驅動 JDBC 數據庫 URL 數據庫名稱 數據庫密碼 SQL 查詢和工作表的名稱(形式為 ) 填充有數據的工作表將加入工作表 當所有連接迭代完成后 工作表將寫入到文件系統中
OracleConnectionVO OracleConnectionVO 中保存了 JDBC 驅動 JDBC 數據庫 URL 數據庫名稱 數據庫密碼和 SQL 查詢的值
XMLConfigVO XMLConfigVO 創建 DocumentBuilderFactory 以分析 config xml 文檔 XPath 查詢用于檢索包含所需值的 NodeList
NodeList nodelist = apache xpath XPathAPI selectNodeList(doc xpath);
當找到正確的節點后 您可以調用 getNodeValue() 來取回它的值 POISheetGenerator 該類的 populateSheet 方法完成大部分的工作 經過初始設置后 列標題將以粗體顯示 數據庫連接已經打開 查詢將執行
檢索了元數據 我們需要元數據來確定將要迭代的列的數量 元數據還包含了一些列的名稱 這些名稱將作為正在處理的工作表中的列名 接下來將迭代結果集 本例中的對各種數據的處理都是很初級的 對于第個返回的對象 程序將試圖以數字(特別是 Java 長字符)填充單元格 如果出現 NumberFormatException 錯誤(因為該值不能轉化為數字) 將調用 toString 用于該返回對象 toString 功能是在 Object 對象中定義的 Object 是 Java 體系的最底層 所以不管返回的是什么對象 都可以保證該方法的有效性 但是 如果按照返回值對于對象的意義性和相關性來分析 那 toString 返回的實際值將是極其多樣的
潛在應用
下面提代了一些查詢示例 可將它們加入 config xml 文件中 以返回一些 DBA 或應用開發人員想在數據庫間進行比較的數據
V$DATABASE 表包含了數據庫的一般信息 當您在比較數據庫配置或解決備份和恢復的問題時 可能需要這些信息 盡管不同版本的數據庫的字段數和類型不同 以下的查詢都可以順利執行 并將顯示合乎所指的表的結果
SELECT * FROM v$database
如果一個 DBA 想記錄一些數據庫的版本信息 那么很可能要用到表 V$VERSION 的數據 在這種情況下 可能要使用下下查詢
SELECT Name: ||name Database Information FROM v$database UNION ALL SELECT DBID: ||dbid FROM v$database UNION ALL SELECT * FROM v$version
在備份和恢復操作中 要關注的文件是主要有控制文件 重做日志文件和數據庫數據文件本身 你可以使用以下查詢檢索這些文件的位置
SELECT * FROM ( SELECT Tablespace Name File Name FROM V$CONTROLFILE union SELECT Member FROM V$LOGFILE union SELECT Tablespace_Name File_Name FROM DBA_DATA_FILES UNION SELECT ****AS OF: ||to_char(sysdate MM/DD/YYYY HH :MI:SS ) || **** FROM dual ) ORDER BY
Oracle Recovery Manager (RMAN) 一般用于管理備份和恢復操作 當要檢查備份活動 或相要實現備份活動的標準化時 你可能要用到數據庫中存儲的 RMAN 相關信息 與 RMAN 備份相關的請求有
SELECT * FROM V$BACKUP_SET
或
SELECT * FROM V$RMAN_CONFIGURATION
Oracle Applications DBA 在管理他們的環境時 可能會遇到一系列的問題 DBA 如果管理的實例很多 那他們可能希望比較已經應用的補丁
SELECT * FROM APPLSYS AD_APPLIED_PATCHES ORDER BY PATCH_NAME
這些只是幾種可能出現的情況 任意的查詢 只要沒有句法錯誤 而且在數據庫有其對應的對象 那么它就是可以執行的 返回的結果也可以顯示在電子表格中 這里提供示例對技術人員來說較有吸引力 您也可以構想一些業務用途 比如訪問特定應用的數據庫對象和查詢
結論
lishixinzhi/Article/program/Oracle/201311/17009
一個是在定義concurrent的時候,在parameter直接把value值寫上
一個如果是report builder的報表,在rdf的參數里也可以寫默認值
一個如果是Package的報表,在程序里寫默認值都可以!
我也做過類似的套打報表,打印紙上各題頭信息都有,只要把內容打印上去就行了。
我是用xml
publisher做的,輸出格式為PDF,在Rtf模板里多畫表格用來固定格式間距,輸出的PDF打印的時候需要記得打印出來各位置的信息,慢慢進行調整就行了。
用WORD或者PDF展示確實比較好處理,因為這兩種文件本來就是按頁展示的,添加分頁的標識就行了(
page
),但是客戶還是希望報表在EXCEL上展現,我已經用EXCEL完成了,詳細請參考附件,就是格式調整的問題,秘訣就是把EXCEL上的報表copy到rtf模版里面,保證長寬一致,就差不多了,還有一點就是,要使用EXCEL2007才行
分享標題:如何制作oracle報表 oracle開發報表的技巧
分享網址:http://m.kartarina.com/article42/hgjhec.html
成都網站建設公司_創新互聯,為您提供網站制作、網頁設計公司、云服務器、軟件開發、網站改版、服務器托管
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯