多语言展示
当前在线:1196今日阅读:39今日分享:10

ireport初级教程之数据源介绍

ireport初级教程之数据源介绍,本文介绍ireport中的数据源
工具/原料

ireport

方法/步骤
1

ireport数据源综述一个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查询,查询的结果将会被包含在一个JRResultSetDataSource对象里(JRResultSetDataSource也是一个JRDataSource对象的实例),这样JasperReports将使用一个JRDataSource对象来关联打印数据。

2

iReport中的数据源iReport允许我们管理和配置不同类型的DataSources用来填充报表。这些DataSources被储存在iReport配置文件中当我们需要的时候即可以使用。我们可以使用的DataSources类型如下:-        JDBC Connection-        XML DataSource-        JavaBean Collection DataSource-        CSV DataSource-        Custom DataSource-        JRDataSourceProvider-        Hibernate DataSource

3

打开状态的JDBC Connection在报表生成的时候会被直接传递到JasperReport中。XML DataSource允许我们从XML文档里获取数据用来填充报表。一个CSV DataSource允许我们打开一个CSV文件来填充报表。JavaBean Collection DataSource,Custom DataSource和JRDataSourceProvider他们允许我们一个写好的java类来获取数据。Hibernate DataSource定义了一个执行HQL语言的方法。DataSource的管理我们可以通过在主菜单“Data Connections/DataSources”(图10.1)打开配置管理DataSource窗口界面。

4

从技术的角度去看一个Connection和一个DataSource是两个不同的对象(Connection需要一个关系一个关系型数据库,但是一个DataSource只是提供一个简单的接口用来访问数据结构)。虽然我们可以建立了若干个DataSource准备使用,但是iReport在工作时同一时候总是使用一个DataSource或一个connection。因此你需要设置一个“active”datasource。设置一个dataSource为“active”最简单的方法是在工具条上的下拉框里选择一个你要使用的datasource,那么这个datasource就处于“active”状态了。

5

同时你也可以从主菜单里的“DataàSet the active connection”在弹出的窗口中选择一个DataSource并设置其为“active”状态。

6

最后我们还可以在DataSource窗口里通过“set default”来设置“active”状态的DataSource。如果没有datasource处理“active”处于激活状态,那么iReport里生成的报表里面将不会产生数据。同时当我们使用报表向导的时候要求必须要有一个处于“active”状态的JDBC Connection。下面以JDBC连接为例,来介绍ireport中的数据源具体设置方式。

7

JDBC连接一个JDBC Connection允许我们从一个关系型数据库里直接获取数据(需要有一个JDBC Driver)。要添加一个新的JDBC Connection,可以点击“New”按钮打开创建新连接的管理窗口。

8

选择“Database JDBC Connection”点击“Next”,在出现的窗口中输入数据源的名称及Driver、URL、username,password等相关信息。

9

点击“test”按钮,对JDBC连接做测试。完成新建JDBC Connection之后,别忘了在管理窗口中设置Connection的“active”状态。

10

当报表采用的是一个JDBC Connection创建的时候,用户需要指定一个SQL语句用来从数据库里取出数据。主报表的Connection也可以为其子报表提供服务。例如,JasperReport里的REPORT_CONNECTION,一个java.sqlConnection类型的内建参数对象放在表达式里提供给子报表使用。$P{REPORT_CONNECTION}这个参数包含的是一个正确的从应用程序里传入的java.sql.Connection对象。使用JDBC或一个SQL Connection是一种最简单的最容易的方式用来填充报表,关于创建SQL查询的细节我们将在11章中讲解。为了可以在报表中使用通过SQL查询出来的fields,我们需要“Register”它们(要注册的可能不是全部是字段,仅仅只是我们在报表中要使用的字段)。对于每一个字段我们需要指定一个名称和字段的类型,下表中显示了SQL类型所对应的Java类型。

11

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

12

同为比较常用的java报表生成工具,FineReport对数据源的解决方案和实现方法与ireport有所不同,具体实现思路和步骤如下,供ireport使用者借鉴:

13

1、概述制作报表前首先需要定义数据来源,实际用户系统最长见的就是数据保存在数据库中,并且在不断更新中,使用数据库数据来制作报表,并且报表内容会随着数据库的更新而更新。FR天然支持这一点,只需要在服务器>定义数据连接中定义需要连接的数据库,就可以自定义查询语句查询出需要的数据,从而制作报表,如下图:数据连接存储在工程中,当用户执行需要访问数据库的操作时这些连接被激活。

14

一个报表工程可以定义多个数据库连接,所有信息都保存在appName/WEB-INF/resources/datasource.xml配置文件中。可以通过JDBC、JNDI、SAP、XMLA和FineBI五种方式连接数据库,当报表执行时需要访问数据库时这些连接才会被激活。注:XMLA和FineBI连接的是多维数据库,其中FineBI是连接帆软的另一款BI产品的数据库。

15

2. JDBC连接与JNDI连接的区别·         JDBC连接数据库JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,下面介绍JDBC连接数据库的方法。

16

·         JNDI连接数据库JNDI(Java Naming and Directory Interface)是一个应用程序设计的API,为开发人员提供了查找和访问各种命名和目录服务的通用、统一的接口,类似JDBC都是构建在抽象层上。

17

·         JDBC 和JNDI连接数据库哪个更有优势使用JNDI连接某个数据源,如名为test,该数据源的所连接的数据库都在应用服务器端定义。因此JNDI连接数据源不需要关心具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?甚至没有数据库连接池或连接管理。而是把这些问题交给J2EE容器来配置和管理,只需要对这些配置和管理进行引用即可。在报表部署后,如果数据库的相关参数变更,只需要重新修改配置文件中的JDBC参数,只要保证数据源的名称不变,那么数据连接就无需修改。由此可见,JNDI避免了报表与数据库之间的紧耦合,和项目共用服务器的连接池,使应用更加易于配置、易于部署。JDBC就是直接连接物理数据库,连接数据库比较快,但在程序中使用的话就比较烦琐,每次连接都要有一定的编码,和数据库的连接需要手动关闭。

18

2.1 JDBC连接数据库示例我们以连接Oracle数据库为例介绍JDBC方式连接一个数据库的操作步骤。·         新建数据库,选择JDBC方式连接

19

·         选择数据库类型,修改URL选择数据库类型如Oracle,会自动加载的驱动器及默认的URL,根据实际数据库服务器地址修改URL,如下:

20

·         连接池属性点击连接池属性可设置该JDBC数据连接的连接池配置,详细请查看JDBC连接池属性,这里使用默认设置,一般性都是用默认设置。

21

·         输入用户名、密码,测试连接输入Oracle数据库用户名与密码,点击左上方的测试连接,提示成功,数据库连接便定义好了。其他数据库连接步骤相同。注:测试连接成功并不是说已经可以正确地获取到数据库的数据,测试的只是网络连接。

22

2.2 数据库驱动及URL对应表以下列出设计器中支持的数据库及对应的连接属性值:

23

注:在进行数据连接的时候要注意驱动器支持的数据库版本,如果选择的数据库版本不在上述表格中,那么就需要更换驱动器。

24

·         示例使用oracle数据库的时候,没有使用上述表格中所说的版本,而是oracle7.2.3,那么需要把oracle7中jdbc/lib目录下的classes12.jar放进FR的WEB-INF/lib中,同时删除ojdbc14.jar。相当于换了一个oracle驱动。

推荐信息