JasperReports教程:Report Data Sources

时间:2021-02-02 21:05:33
原文地址: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;