JasperReports報表數據源

數據源的結構數據容器。同時生成報告,Jasper報表引擎獲得來自數據源的數據。數據可以從資料庫,XML檔,對象數組和集合中的對象來獲得。我們將在本章填充報告所看到的fillReportXXX()方法,預計將收到該報告的數據源其以填充,在net.sf.jasperreports.engine.JRDataSource對象或一個java.sql.Connection中的形式(當報表數據在關係資料庫中找到)。

JRDataSource介面只有兩個方法,這應該被實現:

  1. public boolean next() throws JRException;
  2. 在報表填充時間,這種方法是通過遍歷數據時調用的數據源對象上的報告引擎。
  3. public Object getFieldValue(JRField jrField) throws JRException;
  4. 此方法在當前數據源記錄為每個報表字段的值。

從數據源中檢索數據的唯一方法是通過使用報表字段。有一個JRDataSource介面的幾個默認的實現,根據不同的數據源中的記錄被獲得的方式。

數據源的實現

下表總結了數據源和它們的實現類。

Datasource Implementation Class
JDBC net.sf.jasperreports.engine.JRResultSetDataSource
JavaBean net.sf.jasperreports.engine.data.JRBeanCollectionDataSource, net.sf.jasperreports.engine.data.JRBeanArrayDataSource
Map-based net.sf.jasperreports.engine.data.JRMapArrayDataSource, net.sf.jasperreports.engine.data.JRMapCollectionDataSource
TableModel net.sf.jasperreports.engine.data.JRTableModelDataSource
XML net.sf.jasperreports.engine.data.JRXmlDataSource
CSV net.sf.jasperreports.engine.data.JRCsvDataSource
XLS net.sf.jasperreports.engine.data.JRXlsDataSource
Empty net.sf.jasperreports.engine.JREmptyDataSource

JDBC數據源

JRResultSetDataSource類關聯入一個java.sql.ResultSet對象。這是當報表數據從關係資料庫中提取最常用的數據源實現。如果ajava.sql.Connection傳遞給引擎來代替,它首先執行相關的查詢,並將該返回java.sql.ResultSet中的對象在一個JRResultSetDataSource實例。

JAVABEAN數據來源

JRBeanArrayDataSource類和JRBeanCollectionDataSource表示實現,可以分別包裝的JavaBean對象的數組或集合。數組或集合中的每個對象都將被視為對這種類型的數據源中的一個記錄。一個特定的JavaBean屬性和相應的報表字段之間的映射是通過命名約定進行。報表字段的名稱必須是相同的所指定的JavaBeans的規範JavaBean屬性的名稱。

在本教學中的所有例子中,我們使用JRBeanCollectionDataSource。

基於MAP的數據來源

如果父級應用程式已經存儲在內存中的java.util.Map對象提供的申報數據的實現類JRMapArrayDataSource和JRMapCollectionDataSource非常有用。被包裝的數組或集合中的每個映射對象被認為是數據源中的一個虛擬的記錄,每個報表字段的值從映射中使用報表字段名作為鍵提取。

TableModel的數據來源

在許多客戶端應用程式,數據以表格形式顯示。在許多應用中常見的需求是允許用戶列印該表格形式的報告。實現類JRTableModelDataSource使生成的表格格式的Swing應用程式報告的任務。這個類封裝了一個javax.swing.table.TableModel對象。列在包裝的TableModel對象可以通過他們的名字或他們的基於0索引來訪問。

XML數據源

類JRXmlDataSource是基於DOM,它使用XPath運算式來選擇XML文檔數據的數據源的實現。 XML數據源中的記錄是通過XPath運算式選擇的節點元素表示。字段值是由每個記錄使用由字段描述(JRXML<fieldDescription>元素)所提供的XPath運算式檢索。

XPath是用於導航XML文檔的屬性和元素的語言。有關XPath更多資訊可以在這裏找到http://www.w3.org/TR/xpath.

CSV數據來源

JRCsvDataSource 代表了從結構化文本檔中檢索其數據的數據源的實現,通常為CSV。字段值是正在使用他們的列索引檢索。

xls數據來源

JRXlsDataSource 代表其檢索的Excel檔的數據的數據源的實現。報表字段映射為這個數據源的實現也是基於字段列索引。

空數據來源

類JREmptyDataSource,模擬與內部虛擬空的記錄給定數量的數據源。它是由用戶介面的工具來提供基本的報表預覽功能,或在特殊報告範本,或用於測試和調試目的。

重繞數據源

net.sf.jasperreports.engine.JRRewindableDataSource擴展的基本JRDataSourceinterface。它增加了只有一個方法為MoveFirst()到介面。這種方法的目的是將游標移動到數據源中的第一個元素。

與放置在帶內子報表不允許拆分由於isSplitAllowed=“false”的設定,並且沒有足夠的空間,在當前頁上對要呈現的子報表工作時,重繞的數據源是有用的。

以上所有數據源的實現是可回退除JRResultSetDataSource,因為它不支持移動記錄指針回來。這對只有當該數據源是用它傳遞給子報表之前手動換一個java.sql.ResultSet中的一個問題。這是沒有問題,如果SQL查詢駐留在子報表範本,該引擎將在下一個頁面上重新啟動子報表時,再次執行它。

數據源提供者

JasperReports庫有一個介面net.sf.jasperreports.engine.JRDataSourceProvider。這有助於創建和處理數據源對象。當創建使用GUI工具報表範本,則需要自定義報表的數據源的特殊工具。JRDataSourceProvider是為了堵塞自定義數據源到設計工具的標準方法。自定義實現該介面應實現以下方法,使創建和配置數據源對象和方法,上面列出數據源如果可能的話,裏面可用的報表字段:

 public boolean supportsGetFieldsOperation();

  public JRField[] getFields(JasperReport report)
      throws JRException, UnsupportedOperationException;

  public JRDataSource create(JasperReport report) throws JRException;

  public void dispose(JRDataSource dataSource) throws JRException;
 

上一篇: JasperReport報表參數 下一篇: JasperReports報表字段