




已閱讀5頁(yè),還剩3頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
多個(gè)Oracle數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)Excel報(bào)表文章出處:設(shè)計(jì)前沿收集 作者:未知發(fā)布時(shí)間:2006-09-03關(guān)鍵詞:多個(gè)Oracle數(shù)據(jù)庫(kù)創(chuàng)建一個(gè)Excel報(bào)表微軟的 Excel 電子表格廣泛應(yīng)用于當(dāng)今的商業(yè)環(huán)境中。 盡管 Excel 能夠讀取和顯示分隔文件,但 .xls 專(zhuān)有格式提供了其他一些富于表現(xiàn)力的特性,其中包括字體格式和多工作表電子表格。許多商業(yè)和開(kāi)放源代碼的工具都提供了生成可由 Excel 讀取的報(bào)表的功能。 比如,您可以使用 Oracle Reports 生成一個(gè)電子表格,或使用 SQL*Plus 輸出一個(gè)由逗號(hào)分隔的文件。 利用現(xiàn)有的一些工具可以訪問(wèn)多個(gè)數(shù)據(jù)源。 但報(bào)表的格式與特定查詢(xún)的結(jié)果緊密聯(lián)系,而不同的數(shù)據(jù)源有時(shí)會(huì)生成不同的結(jié)果。 (比如,對(duì)兩個(gè)不同數(shù)據(jù)庫(kù)中的表進(jìn)行 SELECT * FROM emp 查詢(xún),返回來(lái)的列的數(shù)量和類(lèi)型將必然不同。) 出于各種各樣的原因,您可能要訪問(wèn)幾個(gè)不同的數(shù)據(jù)源,然后在一個(gè)電子表格中整理返回的結(jié)果:數(shù)據(jù)庫(kù)管理員可能希望比較不同數(shù)據(jù)庫(kù)的配置。應(yīng)用開(kāi)發(fā)人員可能需要檢查不同數(shù)據(jù)庫(kù)中 PL/SQL 對(duì)象的版本。在數(shù)據(jù)庫(kù)間移植數(shù)據(jù)時(shí),數(shù)據(jù)庫(kù)管理員可能需要估計(jì)作業(yè)的進(jìn)度。程序員使用測(cè)試數(shù)據(jù)庫(kù)調(diào)試應(yīng)用程序時(shí),可能需要將當(dāng)前數(shù)據(jù)與生產(chǎn)環(huán)境中的數(shù)據(jù)進(jìn)行比較。根據(jù)數(shù)據(jù)庫(kù)的不同結(jié)構(gòu)和用途,可能還有其它原因促使您想要生成此類(lèi)電子表格,但所有原因都依賴(lài)于數(shù)據(jù)庫(kù)的功能要求和定義。本文將說(shuō)明如何使用 Apache Jakarta POI 開(kāi)放源代碼項(xiàng)目從幾個(gè)不同數(shù)據(jù)源生成一個(gè)電子表格。 工作簿中的每一個(gè)工作表將顯示從某個(gè)給定 Oracle 數(shù)據(jù)庫(kù)返回的結(jié)果。 在當(dāng)前項(xiàng)目中您要達(dá)到的要求是:運(yùn)行該軟件創(chuàng)建一個(gè)包含從一個(gè)或多個(gè) Oracle 數(shù)據(jù)庫(kù)獲得的數(shù)據(jù)的電子表格。用戶(hù)將定義一個(gè)隨意 SQL 查詢(xún),然后由各個(gè)配置的數(shù)據(jù)庫(kù)處理該查詢(xún)。用戶(hù)將定義一個(gè)或多個(gè)數(shù)據(jù)庫(kù)連接。生成一個(gè)配置文件,其中包括您定義的數(shù)據(jù)連接和 SQL 查詢(xún)。該配置文件的格式為 XML 格式。將生成一個(gè)工作表顯示每個(gè)數(shù)據(jù)庫(kù)返回的結(jié)果。將依據(jù)服務(wù)器名稱(chēng)和 Oracle 系統(tǒng)標(biāo)識(shí)符(又稱(chēng)為 Oracle SID)命名每個(gè)工作表。電子表格將以粗體顯示列標(biāo)題(基于數(shù)據(jù)庫(kù)列)。該軟件將用 Java 編寫(xiě)。將使用 JDBC 訪問(wèn)數(shù)據(jù)庫(kù)。將使用 Jakarta POI 生成電子表格。您可以為生產(chǎn)系統(tǒng)添加許多要求。 很明顯,上面的列表中遺漏了口令加密方面的內(nèi)容。 雖然現(xiàn)在已經(jīng)能夠處理 SQL 數(shù)據(jù)類(lèi)型,但是一個(gè)更健全的解決方案還應(yīng)該能夠處理一些特殊的數(shù)據(jù)類(lèi)型,如 BLOB(二進(jìn)制大對(duì)象)、CLOB(字符大對(duì)象)和 LONG。 目前只能調(diào)用一個(gè) XML 配置文件和一個(gè)腳本來(lái)設(shè)置環(huán)境和執(zhí)行 Java 類(lèi),還未提供易于使用的圖形界面。 由于只執(zhí)行一個(gè)查詢(xún),因此必須保證該 SQL 查詢(xún)無(wú)語(yǔ)法錯(cuò)誤,并基于每個(gè)數(shù)據(jù)庫(kù)的對(duì)象返回一個(gè)結(jié)果集。 且記錄的內(nèi)容非常少。 盡管如此,如果程序達(dá)到了上面的要求,那么該程序還是相對(duì)容易使用的,并且它能夠快速生成包含許多數(shù)據(jù)庫(kù)數(shù)據(jù)的文檔。 如果需要,還可以使用 Excel 編輯該文檔的格式。 因?yàn)閷⒍鄠€(gè)數(shù)據(jù)源的數(shù)據(jù)納入了一個(gè)電子表格中,所以我們可以很方便對(duì)從各數(shù)據(jù)庫(kù)提取的數(shù)據(jù)進(jìn)行比較了。 此外,您使用的主要機(jī)制即 POI 應(yīng)用程序編程接口 (API) 調(diào)用清晰可辨,而不會(huì)被構(gòu)建一個(gè)功能齊備的解決方案所需的其他代碼和資源所淹沒(méi)。測(cè)試和要求本文所生成的軟件是在安裝有 Java 運(yùn)行時(shí)環(huán)境 (JRE) 1.4.2、運(yùn)行 Windows 2000 系統(tǒng)的 PC 機(jī)上編寫(xiě)和測(cè)試完成的。(要了解 JRE 1.5 相關(guān)的問(wèn)題,參見(jiàn)邊欄) Java 的設(shè)計(jì)初衷就是實(shí)現(xiàn)平臺(tái)無(wú)關(guān)性,所以在任何安裝有適當(dāng) JRE 的機(jī)器上都應(yīng)該能正常運(yùn)行。 使用該版本的 JRE,您無(wú)需訪問(wèn)其他外部 API(如 Xerces 和 Xalan)就能利用 XML 處理。初始配置如果系統(tǒng)中有幾種 JRE,那么必須確保正確設(shè)置 PATH 環(huán)境變量,以調(diào)用 1.4.2 或更新版本的 JRE,而非老版本的 JRE。 可在 /j2se/1.4.2/docs/api 中 獲取 JRE 1.4.2 版的 Javadoc 文檔。該軟件下載中包含的批處理文件中的信息已經(jīng)進(jìn)行過(guò)更改,可用于 Linux 環(huán)境,而且這些信息已經(jīng)在 Red Hat Linux 上測(cè)試通過(guò)。 只是對(duì) run.sh 進(jìn)行了適當(dāng)?shù)男薷?,并沒(méi)有更改并執(zhí)行 run.bat。 在 Linux 環(huán)境中,可使用 OpenO 的電子表格程序來(lái)顯示電子表格。環(huán)境設(shè)置基本上就是兩個(gè)環(huán)境變量的設(shè)置: PATH 和 CLASSPATH。 首先要正確設(shè)置 CLASSPATH,以利用提供數(shù)據(jù)庫(kù)訪問(wèn)和 Excel 電子表格功能的 API。 使用 run.bat 文件設(shè)置這一變量,這樣就可以訪問(wèn)相應(yīng)的 Java 文檔(.jar 文件)。 您可能需要將指向 classes12.jar(其中包含 Oracle JDBC 驅(qū)動(dòng))的路徑更改您系統(tǒng)上的正確路徑。 在安裝許多不同的 Oracle 產(chǎn)品時(shí)都將自動(dòng)安裝該文件。如果您系統(tǒng)中沒(méi)有該文件,本文前面提供有文件的下載鏈接。 如果 CLASSPATH 不包含這一 jar,當(dāng)程序試圖載入 JDBC 驅(qū)動(dòng)時(shí),會(huì)出現(xiàn)錯(cuò)誤:Driver not found: oracle.jdbc.driver.OracleDriver java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver下載的文件中有一個(gè) lib 目錄,其中包含有 POI jar (poi-2.5.1-final-20040804.jar)。 如果 CLASSPATH 不包含這一文件,當(dāng)程序試圖創(chuàng)建一個(gè)工作表對(duì)象時(shí),將出現(xiàn)以下錯(cuò)誤:Exception in thread main java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbookThe broadcast.jar 包含有一些文件,利用它們可以集中這些 API 的功能,然后基于配置的連接和 SQL 查詢(xún)來(lái) 構(gòu)建電子表格。 配置文件 (config.xml) 應(yīng)該位于執(zhí)行 broadcast.jar 的目錄中。 如果不是,將出現(xiàn)錯(cuò)誤(文件系統(tǒng)路徑正確):java.io.FileNotFoundException: C:config.xml (The system cannot find the file specified)XML 配置從 1.4 版本起,用于 XML 處理的 Java API 就已經(jīng)加入了 Java 2 平臺(tái)中。 利用該 API,可通過(guò)一系列標(biāo)準(zhǔn)的 Java 平臺(tái) API 來(lái)處理 XML 文檔。 因此,當(dāng)前項(xiàng)目也就無(wú)需另外添加 XML 處理包了。 只使用一個(gè)簡(jiǎn)單的配置文件就可以配置一個(gè) SQL 查詢(xún)和多個(gè)數(shù)據(jù)庫(kù)連接。XML 格式極其適用于配置文件,它使得配置數(shù)據(jù)易于您理解,可以通過(guò)標(biāo)準(zhǔn)的處理方法來(lái)順利訪問(wèn)配置數(shù)據(jù)。 因?yàn)榇鎯?chǔ)在配置文件中的數(shù)據(jù)很有限,也就不需要擔(dān)心出現(xiàn) file bloat 的情況。當(dāng)使用 XML 標(biāo)記符來(lái)標(biāo)記大量數(shù)據(jù)時(shí),會(huì)出現(xiàn) file bloat。 此外, the hierarchical organization of our configuration data benefits from the organization allowed for through nesting entities in XML. 每個(gè)連接節(jié)點(diǎn)包含單一的數(shù)據(jù),合用后就可以創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)連接。下面是一個(gè)配置文件的示例: server001| 1521 ORCL sysdba my1manager server002| 1521 PROD sysdba my1manager select * from v$parameter XMLConfigVO 類(lèi)包含與讀取和分析該 XML 文檔的代碼。 調(diào)用沒(méi)有參數(shù)的構(gòu)造器后,類(lèi)將讀取 config.xml 文件并創(chuàng)建一個(gè)新的 DocumentBuilderFactory實(shí)例。 本例沒(méi)有使用 DTD(文檔類(lèi)型定義)或模式驗(yàn)證。 該廠生成了一個(gè)可供分析的文檔對(duì)象,如果需要,還可操作該文檔。接下來(lái)將選擇與 /broadcast/connection-config/database XPath 表達(dá)式的節(jié)點(diǎn)。 這些節(jié)點(diǎn)包含創(chuàng)建數(shù)據(jù)庫(kù)連接所需的元素: 服務(wù)器名端口、Oracle SID、您名和密碼。 最后,將使用/broadcast/sql-statement XPath 表達(dá)式進(jìn)行查詢(xún),以獲取 SQL 語(yǔ)句。 至此,利用存取器(getter 方法,其形式為 getXXXX())可以從 XMLConfigVO取回所有數(shù)據(jù)。使用 JDBCJava 數(shù)據(jù)庫(kù)連接性 (JDBC) technology 是一個(gè) Java API,它向 Oracle 數(shù)據(jù)庫(kù)提供連接能力,以取回?cái)?shù)據(jù),用于填充電子表格。 JDBC API 還有一個(gè)特別之處,利用它還可在 Oracle 數(shù)據(jù)庫(kù)間建立連接,用于發(fā)送 SQL 語(yǔ)句并處理結(jié)果。 本文中的程序只使用了這一 API 的部分功能,因?yàn)椴恍枰獔?zhí)行 DML 或設(shè)置事務(wù)處理。 盡管支持所有類(lèi)型的數(shù)據(jù)庫(kù),但這里我們要將處理限定到一個(gè)范圍內(nèi),該范圍內(nèi)可清晰地映射到 Excel 電子表格。Oracle JDBC 驅(qū)動(dòng)依賴(lài)于 tnsnames.ora 或其他標(biāo)準(zhǔn)的 Oracle 客戶(hù)連接信息。 只要系統(tǒng)中有 JRE 且 Oracle JDBC 驅(qū)動(dòng)類(lèi)存在于 CLASSPATH (且網(wǎng)絡(luò)中有數(shù)據(jù)庫(kù)),那么 Java 類(lèi)就有足夠的資源來(lái)創(chuàng)建到 Oracle 數(shù)據(jù)庫(kù)連接。classes12.jar 包含 Oracle 專(zhuān)用的 JDBC 驅(qū)動(dòng)和類(lèi),它們也是本項(xiàng)目必須的要件。 它應(yīng)該包含在 CLASSPATH 中,這樣您才能夠運(yùn)行該程序。 你一般可以須/jdbc/lib 找到該文件,你也可以從 OTN 中下載 該文件。OracleConnectionVO 類(lèi)包含與 JDBC 連接相關(guān)的信息和處理。 oracle.jdbc.driver.OracleDriver 將是一個(gè) URL,其形式為 jdbc:oracle:thin:,將通過(guò)它來(lái)創(chuàng)建連接。Jakarata POI正如我在 以前的文章中所述,Jakarta POI FileSystem API 以純 Java 方式實(shí)施 OLE 2 復(fù)合文檔格式,且通過(guò) HSSF API 可以用 Java 來(lái)讀寫(xiě) Excel 文件。 在該篇文章中,使用了這一 API 來(lái)讀取 Excel 文件。 這里我們將使用它來(lái)寫(xiě)一個(gè) Excel 文件。 (POI 也為您提供了打開(kāi)已有的電子表格并對(duì)它進(jìn)行操作的功能)。 如果你想了解 POI 的列多功能,請(qǐng)參見(jiàn) “HSSF 特性指南”,其中提供有代碼實(shí)例,演示了開(kāi)發(fā)人員經(jīng)常需要的功能。要?jiǎng)?chuàng)建一個(gè)工作表對(duì)象,調(diào)用以下代碼(在 BroadcastDriver 類(lèi)):HSSFWorkbook wb = new HSSFWorkbook(fs);在 POISheetGenerator 類(lèi)完成調(diào)用,以創(chuàng)建工作表,然后它加入工作表中:HSSFSheet sheet = wb.createSheet(sheetname);列標(biāo)題的字體為粗體,配置如下:HSSFFont boldFont = wb.createFont(); boldFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); HSSFCellStyle boldStyle = wb.createCellStyle(); boldStyle.setFont(boldFont);在與迭代與結(jié)果集相關(guān)的列時(shí),將應(yīng)用上面定義的單元格格式:row.getCell(short) x).setCellStyle(boldStyle);要將工作表寫(xiě)入磁盤(pán)中,調(diào)用以下代碼:OutputStream = new FileOutputStream(output.xls); wb.write(out); out.close(); broadcast.jarbroadcast.jar 包含了組成項(xiàng)目本身的類(lèi):BroadcastDriver. BroadcastDriver 包含了用于這一應(yīng)用程序的主要方法。 創(chuàng)建 HSSFWorkbook() 對(duì)象,該對(duì)象用于容納所有的工作表。 然后創(chuàng)建 XMLConfigVO 對(duì)象,該對(duì)象用于從 config.xml 中讀取連接和 SQL 查詢(xún)。 使用該對(duì)象中包含的信息,應(yīng)用程序?qū)⒌總€(gè) OracleConnectionVO 并設(shè)置 JDBC 驅(qū)動(dòng),JDBC 數(shù)據(jù)庫(kù) URL,數(shù)據(jù)庫(kù)名稱(chēng),數(shù)據(jù)庫(kù)密碼,SQL 查詢(xún)和工作表的名稱(chēng)(形式為-)。 填充有數(shù)據(jù)的工作表將加入工作表。 當(dāng)所有連接迭代完成后,工作表將寫(xiě)入到文件系統(tǒng)中。OracleConnectionVO. OracleConnectionVO 中保存了 JDBC 驅(qū)動(dòng)、JDBC 數(shù)據(jù)庫(kù) URL、數(shù)據(jù)庫(kù)名稱(chēng)、數(shù)據(jù)庫(kù)密碼和 SQL 查詢(xún)的值。XMLConfigVO. XMLConfigVO 創(chuàng)建 DocumentBuilderFactory 以分析 config.xml 文檔。 XPath 查詢(xún)用于檢索包含所需值的 NodeList:NodeList nodelist = org.apache.xpath.XPathAPI.selectNodeList(doc, xpath);當(dāng)找到正確的節(jié)點(diǎn)后,您可以調(diào)用 getNodeValue() 來(lái)取回它的值。POISheetGenerator. 該類(lèi)的 populateSheet 方法完成大部分的工作。 經(jīng)過(guò)初始設(shè)置后,列標(biāo)題將以粗體顯示。數(shù)據(jù)庫(kù)連接已經(jīng)打開(kāi),查詢(xún)將執(zhí)行。檢索了元數(shù)據(jù),我們需要元數(shù)據(jù)來(lái)確定將要迭代的列的數(shù)量。 元數(shù)據(jù)還包含了一些列的名稱(chēng),這些名稱(chēng)將作為正在處理的工作表中的列名。 接下來(lái)將迭代結(jié)果集。 本例中的對(duì)各種數(shù)據(jù)的處理都是很初級(jí)的。 對(duì)于第個(gè)返回的對(duì)象,程序?qū)⒃噲D以數(shù)字(特別是 Java 長(zhǎng)字符)填充單元格。 如果出現(xiàn) NumberFormatException 錯(cuò)誤(因?yàn)樵撝挡荒苻D(zhuǎn)化為數(shù)字),將調(diào)用 toString,用于該返回對(duì)象。 toString 功能是在 Object 對(duì)象中定義的, Object 是 Java 體系的最底層,所以不管返回的是什么對(duì)象,都可以保證該方法的有效性。 但是,如果按照返回值對(duì)于對(duì)象的意義性和相關(guān)性來(lái)分析,那 toString 返回的實(shí)際值將是極其多樣的。潛在應(yīng)用下面提代了一些查詢(xún)示例,可將它們加入 config.xml 文件中,以返回一些 DBA 或應(yīng)用開(kāi)發(fā)人員想在數(shù)據(jù)庫(kù)間進(jìn)行比較的數(shù)據(jù)。V$DATABASE 表包含了數(shù)據(jù)庫(kù)的一般信息,當(dāng)您在比較數(shù)據(jù)庫(kù)配置或解決備份和恢復(fù)的問(wèn)題時(shí),可能需要這些信息。 盡管不同版本的數(shù)據(jù)庫(kù)的字段數(shù)和類(lèi)型不同,以下的查詢(xún)都可以順利執(zhí)行,并將顯示合乎所指的表的結(jié)果:SELECT * FROM v$database如果一個(gè) DBA 想記錄一些數(shù)據(jù)庫(kù)的版本信息,那么很可能要用到表 V$VERSION 的數(shù)據(jù)。 在這種情況下,可能要使用下下查詢(xún):SELECT Name: |name Database Information FROM v$database UNION ALL SELECT DBID: |dbid FROM v$database UNION ALL SELECT * FROM v$version在備份和恢復(fù)操作中,要關(guān)注的文件是主要有控制文件、重做日志文件和數(shù)據(jù)庫(kù)數(shù)據(jù)文件本身。 你可以使用以下查詢(xún)檢索這些文件的位置:SELECT * FROM ( SELECT Tablespace ,Name File Name FROM V$CONTROLFILE union SELECT , Member FROM V$LOGFILE union SELECT Tablespace_Name, File
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 訂制衣柜門(mén)店客戶(hù)服務(wù)職責(zé)
- 醫(yī)療質(zhì)量事故應(yīng)急處置培訓(xùn)計(jì)劃
- 乳制品質(zhì)量保證及檢測(cè)控制措施
- 醫(yī)療科研人員廉潔從業(yè)九項(xiàng)準(zhǔn)則心得體會(huì)
- 水上運(yùn)動(dòng)場(chǎng)夏季高溫安全措施他
- 小型企業(yè)財(cái)務(wù)風(fēng)險(xiǎn)控制制度及流程他
- 蘇教版六年級(jí)科學(xué)上冊(cè)實(shí)驗(yàn)操作計(jì)劃
- 公務(wù)員反腐倡廉自查心得體會(huì)
- 大型工程總包與分包協(xié)作措施
- 經(jīng)典誦讀興趣小組師生互動(dòng)計(jì)劃
- 自動(dòng)控制原理(全套課件737P)
- 珊瑚海水鹽標(biāo)準(zhǔn)
- 柴油機(jī)電站操作員(技師)理論考試題庫(kù)及答案
- 混凝土地面施工方案
- 天津英華插班生考試卷五年級(jí)
- 工程材料與應(yīng)用完整版教學(xué)課件全書(shū)電子講義(最新)
- 消防工程擬投入主要施工設(shè)備機(jī)具表
- 橋梁工程支座智能化發(fā)展
- BIM技術(shù)在施工項(xiàng)目管理中的應(yīng)用
- 25公斤級(jí)平焊法蘭及螺栓規(guī)格尺寸
- 中文版EN-12546
評(píng)論
0/150
提交評(píng)論