多语言展示
当前在线:193今日阅读:86今日分享:14

jasperreports中文入门教程:[1]报表数据源

数据源的结构数据容器。同时生成报告,Jasper报表引擎获得来自数据源的数据。数据可以从数据库,XML文件,对象数组和集合中的对象来获得。我们将在本章填充报告所看到的fillReportXXX()方法,预计将收到该报告的数据源其以填充,在net.sf.jasperreports.engine.JRDataSource对象或一个java.sql.Connection中的形式(当报表数据在关系数据库中找到)。JRDataSource接口只有两个方法,这应该被实现:1.publicbooleannext()throwsJRException;在报表填充时间,这种方法是通过遍历数据时调用的数据源对象上的报告引擎。2.publicObjectgetFieldValue(JRFieldjrField)throwsJRException;此方法在当前数据源记录为每个报表字段的值。从数据源中检索数据的唯一方法是通过使用报表字段。有一个JRDataSource接口的几个默认的实现,根据不同的数据源中的记录被获得的方式。数据源的实现下表总结了数据源和它们的实现类。Datasource ImplementationClass 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元素)所提供的XPath表达式检索。XPath是用于导航XML文档的属性和元素的语言。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是为了堵塞自定义数据源到设计工具的标准方法。自定义实现该接口应实现以下方法,使创建和配置数据源对象和方法,上面列出数据源如果可能的话,里面可用的报表字段:publicbooleansupportsGetFieldsOperation();publicJRField[]getFields(JasperReportreport)throwsJRException,UnsupportedOperationException;publicJRDataSourcecreate(JasperReportreport)throwsJRException;publicvoiddispose(JRDataSourcedataSource)throwsJRException;同为比较常用的报表工具,FineReport在报表实现过程中所需的代码量远少于jasperreport,大部分的报表代码细节被隐藏,呈现出的是是可视化的设计过程,具体到数据源部分,如下:FineReport提供了异构数据源模型,使得同一张报表中可以呈现来自多个不同类型的数据源,这个多种不同类型的数据源可以是同一数据库的多个不同表,或多个不同数据库,或者多种不同类型的数据源。可支持的数据源类型包括:l数据库数据源:包括Oracle,SqlServer,MySql,DB2,Sybase,Informix等主流的关系型数据库;支持SQL取数据表或视图,亦支持存储过程。l文本数据源:包括Excel文件,Txt文件等存储在文件中的数据。l程序数据源:支持程序数据源。l标准数据源:支持WebService,SOA标准数据等标准数据源。lBI多维数据库:Essbase、ssas、sap、hadoop以及FineBI的cube。以数据库数据源为例,展示FineReport数据源的引用步骤:制作报表前首先需要定义数据来源,实际用户系统最长见的就是数据保存在数据库中,并且在不断更新中,使用数据库数据来制作报表,并且报表内容会随着数据库的更新而更新。FR天然支持这一点,只需要在服务器>定义数据连接中定义需要连接的数据库,就可以自定义查询语句查询出需要的数据,从而制作报表,如下图:数据连接存储在工程中,当用户执行需要访问数据库的操作时这些连接被激活。一个报表工程可以定义多个数据库连接,所有信息都保存在appName/WEB-INF/resources/datasource.xml配置文件中。可以通过JDBC、JNDI、SAP、XMLA和FineBI五种方式连接数据库,当报表执行时需要访问数据库时这些连接才会被激活。注:XMLA和FineBI连接的是多维数据库,其中FineBI是连接帆软的另一款BI产品的数据库。
推荐信息