位置:首页 > Java技术 > JasperReports在线教程 > JasperReports报表数据源

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;