鍍金池/ 教程/ Java/ JasperReports報表數(shù)據(jù)源
JasperReports報表數(shù)據(jù)源
JasperReport查看和打印報告
JasperReports報表表達(dá)式
JasperReport報表設(shè)計
JasperReports報表區(qū)段
JasperReports報表字段
JasperReports報表變量
JasperReport生命周期
JasperReport填充報表
JasperReport編譯報表設(shè)計
JasperReport報表參數(shù)
JasperReports入門,JasperReports是什么?
JasperReports報表組
JasperReport導(dǎo)出報表
JasperReports教程
JasperReport環(huán)境設(shè)置

JasperReports報表數(shù)據(jù)源

數(shù)據(jù)源的結(jié)構(gòu)數(shù)據(jù)容器。同時生成報告,Jasper報表引擎獲得來自數(shù)據(jù)源的數(shù)據(jù)。數(shù)據(jù)可以從數(shù)據(jù)庫,XML文件,對象數(shù)組和集合中的對象來獲得。我們將在本章填充報告所看到的fillReportXXX()方法,預(yù)計將收到該報告的數(shù)據(jù)源其以填充,在net.sf.jasperreports.engine.JRDataSource對象或一個java.sql.Connection中的形式(當(dāng)報表數(shù)據(jù)在關(guān)系數(shù)據(jù)庫中找到)。

JRDataSource接口只有兩個方法,這應(yīng)該被實(shí)現(xiàn):

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

從數(shù)據(jù)源中檢索數(shù)據(jù)的唯一方法是通過使用報表字段。有一個JRDataSource接口的幾個默認(rèn)的實(shí)現(xiàn),根據(jù)不同的數(shù)據(jù)源中的記錄被獲得的方式。

數(shù)據(jù)源的實(shí)現(xiàn)

下表總結(jié)了數(shù)據(jù)源和它們的實(shí)現(xiàn)類。

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數(shù)據(jù)源

JRResultSetDataSource類關(guān)聯(lián)入一個java.sql.ResultSet對象。這是當(dāng)報表數(shù)據(jù)從關(guān)系數(shù)據(jù)庫中提取最常用的數(shù)據(jù)源實(shí)現(xiàn)。如果ajava.sql.Connection傳遞給引擎來代替,它首先執(zhí)行相關(guān)的查詢,并將該返回java.sql.ResultSet中的對象在一個JRResultSetDataSource實(shí)例。

JAVABEAN數(shù)據(jù)來源

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

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

基于MAP的數(shù)據(jù)來源

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

TableModel的數(shù)據(jù)來源

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

XML數(shù)據(jù)源

類JRXmlDataSource是基于DOM,它使用XPath表達(dá)式來選擇XML文檔數(shù)據(jù)的數(shù)據(jù)源的實(shí)現(xiàn)。 XML數(shù)據(jù)源中的記錄是通過XPath表達(dá)式選擇的節(jié)點(diǎn)元素表示。字段值是由每個記錄使用由字段描述(JRXML<fieldDescription>元素)所提供的XPath表達(dá)式檢索。

XPath是用于導(dǎo)航XML文檔的屬性和元素的語言。有關(guān)XPath更多信息可以在這里找到http://www.w3.org/TR/xpath.

CSV數(shù)據(jù)來源

JRCsvDataSource 代表了從結(jié)構(gòu)化文本文件中檢索其數(shù)據(jù)的數(shù)據(jù)源的實(shí)現(xiàn),通常為CSV。字段值是正在使用他們的列索引檢索。

xls數(shù)據(jù)來源

JRXlsDataSource 代表其檢索的Excel文件的數(shù)據(jù)的數(shù)據(jù)源的實(shí)現(xiàn)。報表字段映射為這個數(shù)據(jù)源的實(shí)現(xiàn)也是基于字段列索引。

空數(shù)據(jù)來源

類JREmptyDataSource,模擬與內(nèi)部虛擬空的記錄給定數(shù)量的數(shù)據(jù)源。它是由用戶界面的工具來提供基本的報表預(yù)覽功能,或在特殊報告模板,或用于測試和調(diào)試目的。

重繞數(shù)據(jù)源

net.sf.jasperreports.engine.JRRewindableDataSource擴(kuò)展的基本JRDataSourceinterface。它增加了只有一個方法為MoveFirst()到接口。這種方法的目的是將光標(biāo)移動到數(shù)據(jù)源中的第一個元素。

與放置在帶內(nèi)子報表不允許拆分由于isSplitAllowed=“false”的設(shè)定,并且沒有足夠的空間,在當(dāng)前頁上對要呈現(xiàn)的子報表工作時,重繞的數(shù)據(jù)源是有用的。

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

數(shù)據(jù)源提供者

JasperReports庫有一個接口net.sf.jasperreports.engine.JRDataSourceProvider。這有助于創(chuàng)建和處理數(shù)據(jù)源對象。當(dāng)創(chuàng)建使用GUI工具報表模板,則需要自定義報表的數(shù)據(jù)源的特殊工具。JRDataSourceProvider是為了堵塞自定義數(shù)據(jù)源到設(shè)計工具的標(biāo)準(zhǔn)方法。自定義實(shí)現(xiàn)該接口應(yīng)實(shí)現(xiàn)以下方法,使創(chuàng)建和配置數(shù)據(jù)源對象和方法,上面列出數(shù)據(jù)源如果可能的話,里面可用的報表字段:

 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;