ireport 4.5入門教程之資料來源介紹,本文介紹ireport中的資料來源
工具/原料
ireport
方法/步驟
ireport資料來源綜述
一個DataSource是Jasperreport獲取資料以生成報表的源。這裡有兩種型別的DataSource:一種是JDBC Connection,用來從關係型資料庫裡取資料;另外一種是擴充套件了JRDataSource介面的java object,這種型別的物件允許我們去管理資料的細節,比如一個xml檔案或一個javabean的集合。
通過sql 查詢從關係型資料庫裡取資料來填充生成報表是很簡單的,iReport可以通過各個資料庫廠商提供的JDBC Driver來獲取連線生成要檢索的field。
如果我們不通過JDBC直接訪問資料庫來獲得生成報表的欄位與資料的時候,我們需要使用JRDataSource(全稱JasperReport Data Source)。JRDataSource是一個介面,它允許我們訪問具有行列結構的資料(在Datasource行我們叫records,列我們叫record fields)。
不管是JDBC Connection還是JRDataSource,他們都不能通過JasperReport來建立,但是當應用程式呼叫生成報表的時候,我們可以通過JasperReports的fillReport方法傳遞一個開啟的資料庫連線(一個java.sql.Connection物件)或者是一個JRDataSource物件例項用於填充被呼叫的報表。對於傳遞一個java.sql.Connection物件的情形,JasperReports將在指定的報表裡使用JDBC Connection來執行一個SQL查詢,查詢的結果將會被包含在一個JRResultSetDataSource物件裡(JRResultSetDataSource也是一個JRDataSource物件的例項),這樣JasperReports將使用一個JRDataSource物件來關聯列印資料。
iReport中的資料來源
iReport允許我們管理和配置不同型別的DataSources用來填充報表。這些DataSources被儲存在iReport配置檔案中當我們需要的時候即可以使用。
我們可以使用的DataSources型別如下:
- JDBC Connection
- XML DataSource
- JavaBean Collection DataSource
- CSV DataSource
- Custom DataSource
- JRDataSourceProvider
- Hibernate DataSource
開啟狀態的JDBC Connection在報表生成的時候會被直接傳遞到JasperReport中。XML DataSource允許我們從XML文件裡獲取資料用來填充報表。一個CSV DataSource允許我們開啟一個CSV檔案來填充報表。JavaBean Collection DataSource,Custom DataSource和JRDataSourceProvider他們允許我們一個寫好的java類來獲取資料。Hibernate DataSource定義了一個執行HQL語言的方法。DataSource的管理我們可以通過在主選單“Data Connections/DataSources”(下圖)開啟配置管理DataSource視窗介面。
從技術的角度去看一個Connection和一個DataSource是兩個不同的物件(Connection需要一個關係一個關係型資料庫,但是一個DataSource只是提供一個簡單的介面用來訪問資料結構)。
雖然我們可以建立了若干個DataSource準備使用,但是iReport在工作時同一時候總是使用一個DataSource或一個connection。因此你需要設定一個“active”datasource。設定一個dataSource為“active”最簡單的方法是在工具條上的下拉框裡選擇一個你要使用的datasource,那麼這個datasource就處於“active”狀態了。
同時你也可以從主選單裡的“DataàSet the active connection”在彈出的視窗中選擇一個DataSource並設定其為“active”狀態。
最後我們還可以在DataSource窗口裡通過“set default”來設定“active”狀態的DataSource。
如果沒有datasource處理“active”處於啟用狀態,那麼iReport裡生成的報表裡面將不會產生資料。同時當我們使用報表嚮導的時候要求必須要有一個處於“active”狀態的JDBC Connection。下面以JDBC連線為例,來介紹ireport中的資料來源具體設定方式。
JDBC連線
一個JDBC Connection允許我們從一個關係型資料庫裡直接獲取資料(需要有一個JDBC Driver)。要新增一個新的JDBC Connection,可以點選“New”按鈕開啟建立新連線的管理視窗。
選擇“Database JDBC Connection”點選“Next”,在出現的視窗中輸入資料來源的名稱及Driver、URL、username,password等相關資訊。
點選“test”按鈕,對JDBC連線做測試。
完成新建JDBC Connection之後,別忘了在管理視窗中設定Connection的“active”狀態。
當報表採用的是一個JDBC Connection建立的時候,使用者需要指定一個SQL語句用來從資料庫裡取出資料。主報表的Connection也可以為其子報表提供服務。例如,JasperReport裡的REPORT_CONNECTION,一個java.sqlConnection型別的內建引數物件放在表示式裡提供給子報表使用。
$P{REPORT_CONNECTION}
這個引數包含的是一個正確的從應用程式裡傳入的java.sql.Connection物件。使用JDBC或一個SQL Connection是一種最簡單的最容易的方式用來填充報表,關於建立SQL查詢的細節我們將在11章中講解。
為了可以在報表中使用通過SQL查詢出來的fields,我們需要“Register”它們(要註冊的可能不是全部是欄位,僅僅只是我們在報表中要使用的欄位)。對於每一個欄位我們需要指定一個名稱和欄位的型別,下表中顯示了SQL型別所對應的Java型別。
在上面的表當中對於BLOG和CLOB型別和其它的特殊型別如ARRAY、STRUCT,REF等我們沒有指定對應的JAVA型別,這是因為這些型別在JasperReports裡不能自動管理它們。
同為比較常用的java報表生成工具,FineReport對資料來源的解決方案和實現方法與ireport有所不同,具體實現思路和步驟如下,供ireport使用者借鑑:
1、概述
製作報表前首先需要定義資料來源,實際使用者系統最長見的就是資料儲存在資料庫中,並且在不斷更新中,使用資料庫資料來製作報表,並且報表內容會隨著資料庫的更新而更新。
FR天然支援這一點,只需要在伺服器>定義資料連線中定義需要連線的資料庫,就可以自定義查詢語句查詢出需要的資料,從而製作報表,如下圖:
資料連線儲存在工程中,當用戶執行需要訪問資料庫的操作時這些連線被啟用。
一個報表工程可以定義多個數據庫連線,所有資訊都儲存在appName/WEB-INF/resources/datasource.xml配置檔案中。
可以通過JDBC、JNDI、SAP、XMLA和FineBI五種方式連線資料庫,當報表執行時需要訪問資料庫時這些連線才會被啟用。
注:XMLA和FineBI連線的是多維資料庫,其中FineBI是連線帆軟的另一款BI產品的資料庫。
2. JDBC連線與JNDI連線的區別
JDBC連線資料庫
JDBC(Java Data Base Connectivity,Java資料庫連線)是一種用於執行SQL語句的Java API,可以為多種關係資料庫提供統一訪問,下面介紹JDBC連線資料庫的方法。
JNDI連線資料庫
JNDI(Java Naming and Directory Interface)是一個應用程式設計的API,為開發人員提供了查詢和訪問各種命名和目錄服務的通用、統一的介面,類似JDBC都是構建在抽象層上。
JDBC 和JNDI連線資料庫哪個更有優勢
使用JNDI連線某個資料來源,如名為test,該資料來源的所連線的資料庫都在應用伺服器端定義。因此JNDI連線資料來源不需要關心具體的資料庫後臺是什麼?JDBC驅動程式是什麼?JDBC URL格式是什麼?訪問資料庫的使用者名稱和口令是什麼?甚至沒有資料庫連線池或連線管理。而是把這些問題交給J2EE容器來配置和管理,只需要對這些配置和管理進行引用即可。
在報表部署後,如果資料庫的相關引數變更,只需要重新修改配置檔案中的JDBC引數,只要保證資料來源的名稱不變,那麼資料連線就無需修改。由此可見,JNDI避免了報表與資料庫之間的緊耦合,和專案共用伺服器的連線池,使應用更加易於配置、易於部署。
JDBC就是直接連線物理資料庫,連線資料庫比較快,但在程式中使用的話就比較煩瑣,每次連線都要有一定的編碼,和資料庫的連線需要手動關閉。
2.1 JDBC連線資料庫示例
我們以連線Oracle資料庫為例介紹JDBC方式連線一個數據庫的操作步驟。
新建資料庫,選擇JDBC方式連線
選擇資料庫型別,修改URL
選擇資料庫型別如Oracle,會自動載入的驅動器及預設的URL,根據實際資料庫伺服器地址修改URL,如下:
連線池屬性
點選連線池屬性可設定該JDBC資料連線的連線池配置,詳細請檢視JDBC連線池屬性,這裡使用預設設定,一般性都是用預設設定。
輸入使用者名稱、密碼,測試連線
輸入Oracle資料庫使用者名稱與密碼,點選左上方的測試連線,提示成功,資料庫連線便定義好了。
其他資料庫連線步驟相同。
注:測試連線成功並不是說已經可以正確地獲取到資料庫的資料,測試的只是網路連線。
2.2 資料庫驅動及URL對應表
以下列出設計器中支援的資料庫及對應的連線屬性值:
注:在進行資料連線的時候要注意驅動器支援的資料庫版本,如果選擇的資料庫版本不在上述表格中,那麼就需要更換驅動器。
示例
使用oracle資料庫的時候,沒有使用上述表格中所說的版本,而是oracle7.2.3,那麼需要把oracle7中jdbc/lib目錄下的classes12.jar放進FR的WEB-INF/lib中,同時刪除ojdbc14.jar。相當於換了一個oracle驅動。