所謂的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的基本認知與方法如下:
- 將record放在Map中。一個Map即一筆record。
- 將每一個Map放到List中。一個List可視為一張table。
- 將list放到JRMapCollectionDataSource內。
以下是範例說明:
執行結果:
完整程式碼如下:
JasperReports檔如下:
JRBeanCollectionDataSource
如果程式中有使用到bean,當要產生報表時,可以直接使用JRBeanCollectionDataSource(不必為了使用JRMapCollectionDataSource,將bean轉成Map)。使用JRBeanCollectionDataSource的基本認知與方法如下:
- 一個bean就是一筆record。
- 將每一個bean放到List中。一個List可視為一張table。
- 將list放到JRBeanCollectionDataSource內。
以下是範例說明:
執行結果:
報表檔與JRMapCollectionDataSource的相同。
完整程式碼如下:
JRResultSetDataSource
有時候報表會包含大量的資料,如果使用JRMapCollectionDataSource或JRBeanCollectionDataSource,就會佔據許多應用程式伺服器的記憶體空間。為了避免這種情形,可以使用JRResultSetDataSource,直接將ResultSet放到JasperReports data source中,讓JasperReports去處理ResultSet並產生報表。使用JRBeanCollectionDataSource的基本認知與方法如下:
- 產生ResultSet。一個ResultSet可以想像成是一張table。
- 將ResultSet放到JRResultSetDataSource內。
以下是範例說明:
執行結果:
報表檔與JRMapCollectionDataSource的相同。
完整程式碼如下:
其他JasperReports data source
JasperReports除了本文介紹的data source外,還包含了許多的data source。有興趣的話,可以參考官方API文件。
沒有留言:
張貼留言