原文地址: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;

JasperReports教程:Report Data Sources的更多相关文章

  1. Spark SQL 之 Data Sources

    #Spark SQL 之 Data Sources 转载请注明出处:http://www.cnblogs.com/BYRans/ 数据源(Data Source) Spark SQL的DataFram ...

  2. Spark SQL External Data Sources JDBC官方实现写测试

    通过Spark SQL External Data Sources JDBC实现将RDD的数据写入到MySQL数据库中. jdbc.scala重要API介绍: /** * Save this RDD ...

  3. Spark SQL External Data Sources JDBC简易实现

    在spark1.2版本中最令我期待的功能是External Data Sources,通过该API可以直接将External Data Sources注册成一个临时表,该表可以和已经存在的表等通过sq ...

  4. 黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block

    原文:黄聪:Microsoft Enterprise Library 5.0 系列教程(五) Data Access Application Block 企业库数据库访问模块通过抽象工厂模式,允许用户 ...

  5. 解决IDEA Springboot项目sql文件打开提示No data sources are configured to run this SQL and provide advanced的问题

    Idea2018的Springboot项目,如果里面有.sql文件,打开后,会提示"No data sources are configured to run this SQL and pr ...

  6. 警告: No data sources are configured to run this SQL and provide advanced code assistance. Disable this inspection via problem menu (Alt+Enter). more... (Ctrl+F1) SQL dialect is not configured. Postgr

    python3出现问题: 警告: No data sources are configured to run this SQL and provide advanced code assistance ...

  7. vue教程1-02 data里面存储数据

    vue教程1-02 data里面存储数据 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  8. Weblogic多数据源(Multi Data Sources)应用实践

    原创 2012年03月29日 10:55:28 标签: weblogic / 数据库 / 负载均衡 / 数据中心 / jdbc / 应用服务器   大型系统在进行数据库部署时,常常会分为主数据应用中心 ...

  9. JasperReports教程

    JasperReports教程 Jasper报表是一个开源的Java报表引擎,是基于Java的,它没有自己的表达式语法. 由于JasperReports是一个Java类库,而不是针对最终用户,而是有针 ...

随机推荐

  1. 比较body.onload(function())、$(document).ready(function())与$(windows).load(function)

    原理对比: body.onload(function())是优先将document的DOM渲染,即将页面所有的元素(包括html标签以及所引用到的图片,flash媒体等媒体文件)加载完成,然后再执行页 ...

  2. ajax回调函数Status问题

    function readyDo() {//            alert(xhr.readyState + "分" + xhr.Status);            if ...

  3. Maven仓库分类

    MAVEN仓库分类 Maven仓库分为:本地仓库+远程仓库两大类 远程仓库又分为:中央仓库+私服+其它公共远程仓库 1,在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件 2,Ma ...

  4. 常见的几种RuntimeException

    一般面试中java Exception(runtimeException )是必会被问到的问题 常见的异常列出四五种,是基本要求.更多的....需要注意积累了   常见的几种如下:   NullPoi ...

  5. ahjesus Unity3D XML注释被编译的问题

    public class XMLStringReader : MonoBehaviour { public string slectedItem; private bool editing = fal ...

  6. [CLK Framework] CLK.Settings - 跨平台的参数存取模块

    [CLK Framework] CLK.Settings - 跨平台的参数存取模块 问题情景 开发功能模块的时候,常常免不了有一些参数(例如ConnectionString),需要存放在Config檔 ...

  7. 关于IE处理margin和padding值超出父元素高度的问题

    两个div,父div有padding值,子div有margin-top值,浏览器在解析实际父子位置关系时,他们之间的距离是父padding+子margin-top.现在把父div设置固定高度,并有意让 ...

  8. React 初学整理

    1,通过createElement创建元素 HELLO Word ps:切记组建名称首字母大写 2,虚拟DOM 在虚拟DOM上操作 通过render来渲染真是DOM 3,JSX JSX 是对JS的语法 ...

  9. 在ALV中更新数据库表

    FORM usercommand USING ucomm TYPE sy-ucomm selfield TYPE slis_selfield. DATA: lr_grid TYPE REF TO cl ...

  10. ABAP中正则表达式的简单使用方法 (转老白BLOG)

    在一个论坛上面看到有人在问正则表达式的问题,特举例简单说明一下.另外,REPLACE也支持REGEX关键字.最后:只能是ECC6或者更高版本才可以(ABAP supports POSIX regula ...