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;