2011年6月16日 星期四

JasperReports data source

前言
所謂的JasperReports data source,我們可以想像成是一個database,其內的資料依顆粒度大小,可以依序想像成table、record。本文會介紹四種JasperReports data source(可以想像成四種database),他們有各自的table和record格式,程式設計師可根據不同程式使用不同的data source。

版本
JasperReports和iReport版本為4.0.1。(本文發表時最新版本為4.0.2)

JREmptyDataSource
請想像成是一個空的database。當報表中不須要使用到任何的table和record時使用。例如報表中沒有detail band(不用顯示多筆records),又或者是報表中只需要顯示參數或變數,就可以使用JREmptyDataSource。以下是範例說明:



執行結果:

完整程式碼如下:



JasperReports檔如下:



接下來會介紹三種JasperReports data source,當報表或子報表需要顯示多筆records時,可以視程式不同來決定使用何種JasperReports data source。

JRMapCollectionDataSource
使用JRMapCollectionDataSource的基本認知與方法如下:
  1. 將record放在Map中。一個Map即一筆record。
  2. 將每一個Map放到List中。一個List可視為一張table。
  3. 將list放到JRMapCollectionDataSource內。

以下是範例說明:


執行結果:


完整程式碼如下:


JasperReports檔如下:


JRBeanCollectionDataSource
如果程式中有使用到bean,當要產生報表時,可以直接使用JRBeanCollectionDataSource(不必為了使用JRMapCollectionDataSource,將bean轉成Map)。使用JRBeanCollectionDataSource的基本認知與方法如下:
  1. 一個bean就是一筆record。
  2. 將每一個bean放到List中。一個List可視為一張table。
  3. 將list放到JRBeanCollectionDataSource內。

以下是範例說明:

執行結果:


報表檔與JRMapCollectionDataSource的相同。
完整程式碼如下:



JRResultSetDataSource
有時候報表會包含大量的資料,如果使用JRMapCollectionDataSource或JRBeanCollectionDataSource,就會佔據許多應用程式伺服器的記憶體空間。為了避免這種情形,可以使用JRResultSetDataSource,直接將ResultSet放到JasperReports data source中,讓JasperReports去處理ResultSet並產生報表。使用JRBeanCollectionDataSource的基本認知與方法如下:
  1. 產生ResultSet。一個ResultSet可以想像成是一張table。
  2. 將ResultSet放到JRResultSetDataSource內。

以下是範例說明:

執行結果:

報表檔與JRMapCollectionDataSource的相同。
完整程式碼如下:



其他JasperReports data source
JasperReports除了本文介紹的data source外,還包含了許多的data source。有興趣的話,可以參考官方API文件

沒有留言:

張貼留言