JasperReports教程:Report Data Sources


原文地址:http://www.tutorialspoint.com/jasper_reports/jasper_report_data_sources.htm

Datasources是一個結構化的數據容器。當要生成報表時,Jasperreport引擎從數據源獲取數據。數據可以從數據庫(databases)、XML文件(XML file)、對象數組、對象集合獲取。在Filling Reports章節可以看到,fillReportXXX()方法需要接收一個數據源填充這個報表,比如net.sf.jasperreports.engine.JRDataSource對象或java.sql.Connection對象(當報表數據在相關的數據庫中查找到)。


JRDataSource接口有兩個需要實現的方法:

  1.public boolean next() throws JRException;

  嘗試將光標定位到數據源的下一個位置

  2.public Object getFieldValue(JRField jrField) throws JRException;

  此方法提供了從當前數據源記錄中獲取報表的每個字段的值

Datasource Implementations

下表總結了數據源與他們的實現類

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.JRMapCollectionDataSource,

net.sf.jasperreports.engine.data.JRMapArrayDataSource

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

net.sf.jasperreports.engine.data.XlsDataSource

Empty net.sf.jasperreports.engine.data.JREmptyDataSource

 

JDBC data sources

  這是最常用的從相關數據庫提取報表數據的方式。如果用java.sql.Connection來代替傳遞給引擎,它會在JRResultDataSource實例中執行相關查詢並保存返回的java.sql.ResultSet對象。

JavaBean data sources

  類JRBeanArrayDataSourceJRBeanCollectionDataSource分別代表了實現包裝數組或集合的JavaBean對象。數組或集合內的每個對象都被視為該類型數據源的一條記錄。通過命名約定映射JavaBen屬性與對應的報表字段之間的字段。報表字段的名稱必須與JavaBean屬性的名稱相同(按指定的JavaBeans規范)。

Map-based data sources

  實現類JRMapArrayDataSourceJRMapCollectionDataSource使用時,必須是已經把報表數據以java.util.Map對象的形式保存在內存中。包裝數組或集合中的每個Map對象可以被認為是數據源中的虛擬記錄,並且每個報表字段的值是以報表字段的名稱作為key提取的。

TableModel data sources

//此處省略

 

Empty data sources

JREmptyDataSource類模擬一個具有經定數的虛擬空記錄的數據源。它用UI工具提供基本的報表預覽功能,或者特殊的報表模板,或者用於測試或調試。

Rewindable Data Sources

  接口net.sf.jasperreports.engine.JRRewindableDataSource繼承了JRDataSource接口。它增加了一個moveFirst()方法。這個方法的目的是把光標移動到數據源的第一條記錄。

Rewindable數據源用於子報表band設置了isSplitAllowed="false"表明不允許分割,或者當前頁面沒有足夠的空間給子報表進行渲染。

 

  上面所有的數據源都實現了JRRewindableDataSource,除了JRResultSetDataSource,因為它不支持回退記錄指針。數據源傳遞一個手動包裝的java.sql.ResultSet給子報表是有問題的。正確的處理方法是SQL查詢在子報表模板內,因為在重啟下一個頁面的子報表時,引擎會再次執行。

 

Data Source Providers

JasperReport庫有一個接口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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM