天天看点

iReport专题学习之数据源 09

一、概述

一个DataSource是jasperreport获取数据以生成报表的源,这里有两种类型的DataSource:一种是JDBC Connection,用来从关系型数据库里获取数据,另外一种是扩展了JRDataSource接口的java.object,这种类型的对象允许我们去管理数据的细节,比如一个xml文件或者一个javaBean的集合。

通过sql查询关系型数据库里获取数据来填充生成报表时简单的,iReport可以通过各个数据库厂商提供的JDBC Driver来获取连接生成要检索的field。

如果我们不通过JDBC直接访问数据库来获得生成报表的字段与数据的时候,我们需要使用JRDataSource(全称为JasperReport Data SOurce).JRDataSource是一个借口,它允许我们访问具有行列结构的数据(在DataSource行我们叫做records,列我们叫做record fields)。

不管是JDBC Connection还是JRDataSource,它们都不能通过JasperReport来创建,但是当应用程序调用生成报表的时候,我们可以通过JasperReports的fillReport方法传递一个打开的数据库连接(一个java.sql.Connection对象)或者是一个JRDataSource对象实例用于填充被调用的报表。对于传递个java.sql.Connection对象的情形,jasperReports将在指定的报表里使用JDBC Connection来执行一个SQL查询,查询的结果将会被包含在一个JRResultSetDataSrouce对象里(JRResultDataSource也是一个JRDataSrouce对象的实例)这样JasperReports将使用一个JRDataSource对象来关联打印数据。

在本章节中,我们将阐述JRDataSource的不同类型和它们如何在iReport中使用,此外我们爱将看到如何对一个JRDataSource做扩展,通常通过一个扩展一个dataSource,可以克服JasperReports自身的一些局限性,比如在交叉报表中的使用。

二、iReport中的数据源

iReport允许我们管理和配置不同类型的DataSource用来填充报表,这些DataSource被存储在iReport配置文件中当我们需要的时候即可以使用。

我们可以使用的DataSource类型如下:

*JDBC Connection:打开状态的JDBC Connection在报表生成的时候会被直接传递到JasperReport中

*XML DataSource:XML DataSource 允许我们从XML文档里获取数据用来填充报表。

* JavaBean Collection DataSource

* CSV DataSource:允许我们打开一个CSV文件来填充报表。

* Custom DataSource

* JRDataSourceProvider

* Hibernate DataSource:定义了一个执行HQL语句的方法。

Java Bean Connection DataSource、Custom DataSource和JRDataSourceProvider允许我们一个写好的java类来获取数据。

Data Connection/DataSources是iReport专门用来管理DataSource的,如下图-1所示:

iReport专题学习之数据源 09

图-1

从技术的角度来看一个Connection和一个DataSource是两个不同的对象(Connection需要一个关系型数据库,但是一个DataSource只提供一个简单的接口用来访问数据库结构)。

虽然我们可以建立了若干个DataSource准备使用,但是iReport在工作时总是使用一个DataSource或者一个Connection,因此你需要设置一个"default"dataSource,设设置一个DataSource为”default“最简单的方法就是在工具栏上的下拉框选择一个你要使用的DataSource,那么这个DataSource就处于"default"了,如下图-2所示:

iReport专题学习之数据源 09

图-2

同时也可以再DataSource窗口里通过"set Default"来设置默认状态的DataSource,如上图-1所示,如果没有DataSource处于default状态,那么iReport里生成的报表里面将不会产生数据,同时当我们使用报表向导的时候要求必须有一个default状态的JDBC Connection。

2.1、JDBC连接

一个JDBC Connection允许我们从一个关系型数据库里直接获取数据(需要有一个JDBC Driver),要添加一个新的JDBC COnnection,可以点击"New" 按钮来打开创新连接的管理窗口,如下图-3所示:

iReport专题学习之数据源 09

图-3

选择"DataSource JDBC Connection"点击"Next",在出现的窗口中输入数据源的名称以及Driver、URL、username、password等相关信息,如下图-4所示:

iReport专题学习之数据源 09

图-4

点击”test“按钮,对JDBC连接做测试,如下图-5所示:

iReport专题学习之数据源 09

图-5

完成新建JDBC Connection之后,别忘了在管理窗口中设置Connection的default状态。

当报表采用的是一个Connection创建的时候,用户需要指定一个SQL语句用来从数据库里取出数据。主报表的Connnection也可以为其子报表提供服务,比如:JasperReport里的REPORT_CONNECTION,一个java.sqlConnection类型的内建参数对象放在表达式里提供给子报表使用。

$p{REPORT_CONNECTION}

这个参数包含的是一个正确的从应用程序里传入的java.sql.Connection对象,使用JDBC或者一个SQL Connection是一种罪简单的最容易的方式用来填充报表,关于创建SQL查询的细节我们在后面章节讲解。

为了可以再报表中使用通过SQL查询出来的fields,我们需要"Register"它们,对于每一个字段我们需要指定一个名称和字段的类型,下表中显示了SQL类型所对应的java类型

SQL 类型 JAVA类型
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC Java.math.BigDecimal
DECIMAL Java.math.BigDecimal
BIT Boolean
INTYING Integer
SMALLINT Integer
INTEGER Integer
BINARY Byte[]
VARBINARY Byte[]
LONGVARBINARY Byte[]
DATE Java.sql.Date
TIME Java.sql.Time
TIMESTAMP Java.sql.Timestamp

在上面的表中对于在BLOG和CLOB类型和其他的特殊类型如ARRAY、STRUCT、REF等我们没有指定对应的JAVA类型,这是因为类型JasperReporrs里不能自动管理它们。

由于篇幅关系,关于数据源其他的知识在后面的章节学习。