




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 V1.0iReport报表设计器使用说明文件编号文件状态 草稿 正式发布 正在修改当前版本拟 制日期审 核日期批 准日期 修订历史记录 A - 增加 M - 修订 D - 删除变更版本号日期变更类型(A*M*D)修改人摘 要备注目录iReport报表设计器使用说明1先演示一个简单报表的创建过程5Øa、新建一个报表5Øb、选择报表模版6Øc、命名报表,选择存放路径7Ød、给报表组织数据源8Øe、选择统计分组字段12Øf、完成报表的建立过程12Øg、将可用的数据域组织到相应的位置即可完成报表的设计。13Øh、查看设计
2、好的报表效果。14理解几个重要概念15Øa、iReport的输出格式15Øb、报表的动态对象变量、参数、字段15Øc、编译、静态运行、动态运行15Ød、报表的结构15讲解制表过程常用的几个控件和相应的设置17Ø先将全局分成下面几个版块17Ø报表报表属性管理版块20Ø报表设计版块22Ø各种元素及其属性版块23制表过程常见问题解答23ØText field与static text的区别23Ø如何设置两行数据的间距24Ø如何给报表设置参数24Ø表报中文格式无法输出pdf或输出pdf
3、时为乱码26Ø解决字符串过长,自动换行的问题29Ø如何让报表的数据在方框里面显示32Ø如何设置报表的宽度和高度35Ø如何让字体居中,靠左等36Ø配置数据源时提示找不到jdbc驱动37Ø查询语句有数据的情况下输出报表为空38Ø如何运用变量,以设置变量统计某一列为例39Ø如何制作分组报表42Ø如何制作子报表45i.先举例说明一下什么是子报表:45ii.总结子报表概念45iii.制作子报表的几个前提条件46iv.制作子报表的过程46Ø数据源的配置531.iReport中的数据源542.JDBC连接55
4、²ClassNotFoundException56²URL不正确57²连接参数不正确57²使用JDBC连接57²字段注册573.JRDataSource接口584.JavaBean作为数据源59²JavaBean的一个字段作为数据源605.XML数据源62²字段的注册646.XML和子报表667.CSV数据源70²字段的注册718.JREmptyDataSource71²实现一个新的JRDataSource72²用iReport实现个性化的JRDataSource749.JavaBean Ext
5、ended数据源76Ø参数$P! 与$P 的区别77Ø如何制作图表78a.饼图(或3D饼图):78b.柱状图(或3D柱状):81c.线图:85d.区域图:89e.其他图:89Ø制作模版89a)制作模版89b)添加模版92c)利用模版93附: iReport报表中各个元素的属性的含义95先演示一个简单报表的创建过程Ø a、新建一个报表Ø b、选择报表模版Ø c、命名报表,选择存放路径Ø d、给报表组织数据源如果还没有数据源,可以选择新建new,将显示下图新建步骤可测试数据源是否有效。然后选择保存。保存完后接下来需要组织sql语
6、句。然后选择需要的数据域(即字段)Ø e、选择统计分组字段这里的分组是为方便后面的统计用的。这里我们暂时选择为空。需要者可自己测试Ø f、完成报表的建立过程Ø g、将可用的数据域组织到相应的位置即可完成报表的设计。Ø h、查看设计好的报表效果。 进一步学习之前先学习理解下面几个重要的概念。理解几个重要概念Ø a、iReport的输出格式iReport的预览输出格式可以支持以下几种: PDF、HTML、CSV、JAVA2D、Excel、纯文字、JRViewer,其中最常用的是PDF、JRViewer。 Ø b
7、、报表的动态对象变量、参数、字段 在使用iReport的过程中会碰到很多与变量(Variables)、参数(Parameters)、字段(Fields)这些有关的内容,我们要介绍这些对象的使用和意义: ·字段(Fields):是数据库抽取出来的,希望在报表中出现的数据库内容。 比如一个ID的所有值。$F filedsName F必须为大写 ·参数(Parameters):参数是程序用来传递给报表的一个值,是你的应用需要提供给报表的入口,比如你希望在报表被解释的时候提供Where语句的条件值,那么
8、就可以使用参数(Parameters)。$P parameterName P必须为大写 ·变量(Variables):变量是一个用来存放计算结果的对象,比如统计值。$V variablesName 每种对象的定义格式如每个对象的后面说明,比如定义一个变量(Variables),那么表达式就写成$V variablesName ,报表中出现的就是这个变量的名称。 V必须为大写Ø c、编译、静态运行、动态运行 Jasperreport运行时需要的就是一个jasper后缀的文件,编译过程其实就是把jrxml后缀的文件生成jasper后缀的文件
9、。(可以参考Jasperreport的运行原理) 静态运行和动态运行是相对的,后者带数据源运行,比如带数据库运行。前者就是静态文本运行,和数据源无关,如果报表中出现和数据源有关的对象,则以null显示。 Ø d、报表的结构 一个报表的结构大致是几个部分:title、pageHeader、columnHeader、detial、columnFooter、pageFooter、summary、groupHeader、groupfooter。 ·Title:每个报表一般会有一个名字,比如××&
10、#215;销售报表,title就是搁置这个名称的最好地方了,当然你也可以根据需要搁置在合适的地方。 只在整个报表的第一页的最上面部分显示. ·pageHeader:报表的一些公共要素,比如页码、创建时间、创建人等信息放置在这里是比较好的选择。 ·columnHeader:这里放置列的名称,记住不是列数据。 ·Detial:放置需要循环的数据,一般就是查询出来的列对应的数据。 ·columnFooter:放置列级别的统计计算值或是列的说明。
11、60; ·pageFooter:放置页级别的统计值或是页的说明。 显示在所在页面的最下端. ·Summary:可能需要对几页(你的报表可能有几个页组成)的统计值。比如50个销售记录共占用了3页,那么放置这些统计记录的统计值最好的地方就是summary。 一般用来统计报表中某一个或某几个字段的合计值。 ·groupHeader:每个表的内容可能需要根据某个属性进行划分显示内容和计算内容,比如希望以月份为单位每组分开显示销售记录,那么就可以定义一个组(组的定义参考后文),groupHeader就是放置组
12、说明或是组标志最好的地方。 (定义了分组时才会出现) ·Groupfooter:放置组的统计或是说明讲解制表过程常用的几个控件和相应的设置Ø 先将全局分成下面几个版块Ø 报表属性管理版块Ø 报表设计版块Ø 各种元素及其属性版块指定被选元素在条目中的y轴坐标位置类型:当报表因拉伸而受到影响时,指定被选元素的位置.Float:备选元素根据周围的元素尺寸所移动;Fix Relative to Top:元素保持相对于条目顶部位置;Fix Relative to Bottom:元素保持相对于条目底部位置;Ø 属性版块表
13、达式计算时刻Now:当前Report:报表结束Page:当前页结束Column:当前列结束Group:组发生变化超出时拉伸为空时显示空白指定pdf字体是否被嵌在文档中线间隔,single(单),1_1_2(1.5),double(双)穿越线是否透明背景色前景色指定被选元素的宽度和高度指定被选元素在条目中的x轴坐标是否当表达式成立时输出:表达式成立时输出被选元素,默认false,一般不要修改这个值当组改变时输出:当指定的组发生改变时,输出被选元素当超出细节条目时输出:当由于某些原因而导致当前条目不能在当前页打完,当开始一个新的页时,被选元素是否在新页上重新输出在第一个条目输出:当你选择Print
14、 Repeated Values为false,在换页或换列时,是否重新输出该值.为空时移除线:当条目中的一条记录都为空时,是否把该条记录从条目中移除输出重复值:当多条记录连续中某字段的值都相同时,是否每条记录的该字段否输出,默认为true.拉伸行为类型:当报表被拉伸时的拉伸行为类型NoStretch:不拉伸;Relative to Tallest Object:图形元素将适应元素组中最高的元素拉伸;Relative to Band Object:图形元素将适应条目拉伸;制表过程常见问题解答Ø Text field与static text的区别Textfield为文本域,一般为有效的j
15、ava表达式,如果是中文或其他字符等非表达式,需要用双引号包含作为字符串处理。Statictext静态文本,里面的内容直接输出,不做任何处理。例如:Text Field里面可容纳任何变量或参数,字段甚至任何有效的java表达式值。如果文本的内容需要按照某些条件进行变化的。这时就需要使用Text Field。Static Text里面包含的内容会一成不变的显示出来。不会根据条件变化的。如果用作标题或其他的不变的文本,可选用它。Ø 如何设置两行数据的间距设置两行数据之间的距离:detail域表示的是一次计算的高度。如果两行数据仅相当与一行的表格,则detail的高度就是一个表格的高度,比
16、如,希望两行的数据连接比较紧凑,则detail的高度设置为字段框的高度即可。如下图:效果图:如果不留意这个设置,比如detail高度比较高。如图:效果图:Ø 如何给报表设置参数首先确定报表参数名称,在报表属性管理版块里面的Parameters新建一个参数。比如命名一个参数为:districtcode,初始值为:”00%”新建参数完成后,可用该参数进行参数设置了。一般用在sql语句里面。比如我需要根据该参数开重新组织数据集,则可在数据源里面重新组织sql语句:select *from mis_district awhere a.districtcode like $Pdistrictc
17、ode如下图示:参数利用时的格式为:$P参数名。注意:这里的P必须为大写设置好参数之后,报表输出时将要求输入参数,如果不输入,可选默认值(即初始值):Ø 表报中文格式无法输出pdf或输出pdf时为乱码第一:确保. JaspersoftiReport-nb-3.6.0platform7lib下面有iTextAsian.jar包,如果没有,则需要添加进去。有了该包后,在工具菜单的选项里面对其进行添加。注意:这一步完成之后要重启才生效。第二:选择包含中文字符的元素框,对其pdf pont name属性和pdf Encoding属性进行编辑,将pdf pont name设置为STSong-L
18、ight,pdf Encoding设置为:UniGB-UCS2-H(Chinese simple)这种方法是对单独的元素进行设置。也可以定义一个全局的style,再对选中的的元素都进行应用该样式即可。那可以在报表属性管理版块里面的styles里面设置。如下新建一个style的例子:然后对需要应用该样式的元素选择引用该样式即可这种定义全局样式不局限于解决该问题。对全局定义统一样式的都可以使用到这种方法。Ø 解决字符串过长,自动换行的问题第一:首先确定那一列或字段有可能过长,然后选中该字段,对其Text fieldproperties属性Stretch with overflow进行修改
19、,如下图示:第二:同时把该行所有的字段选上,然后在属性里面对Stretch Type属性进行编辑,选择为Relative to tallest object。如下图示:Stretch with overflow:当它被选择时,表示这个选项可以垂直的改变内容,如果元素不能充分的包含在文本线内的话修改了这两点后,输出之后的效果如图: Ø 如何让报表里的空数据显示为空,不显示null当对报表的空数据不做处理时,将显示以下结果:null想要让null以空白显示只需如下操作:选中可能有空数据的字段,在属性列勾选Blank When Null。Ø 如何让报表的数据在方框里面显示在默认情
20、况下,打印出来的数据是看不到方框的(其实不是没有方框,而是默认情况下方框的线条宽度设置为0了)。要将方框显示出来,原理很简单,只需要将线条宽度设置大于0的数字即可。但是直接是找不到设置的属性的。我们需要自己定义一个全局Styles。下面一步步说明如何设置:第一:定义一个style,命名为:“中文”(可随意):将其选中,在右边的属性栏里面对其Padding and borders属性进行编辑:然后将要显示的元素全部选中,右边style属性应用刚新建的“中文”style即可:说明一点,这里面的方框是对你选中的方框显示的。如果你希望形成表格形式,请将各方框相连:打印效果如下:Ø 如何设置报
21、表的宽度和高度右击报表属性,修改高度和宽度即可,如下图:Ø 如何让字体居中,靠左等先寻则要修改的字段或列,然后在Text properties下面的Horizontal Alignment的属性修改为center即可,如下图示:或者直接选中列,在文本编辑工具上直接编辑即可,如下图示:Ø 解决自动换行,跨页后内容信息显示不完整的问题当由于字符串内容太长,设置自动换行后,跨页时就会出现以下内容显示不完整的问题:此时,只需将整行选中,在属性列勾选Print When Detail Overflows(当输出细节条目式输出),当然,此处条件是必须Print Repeated Val
22、ues(输出重复值)没有修改默认,即选中的情况。即可显示如下打印数据:Ø 配置数据源时提示找不到jdbc驱动找到一个ojdbc14.jar(如在mis下的WebRootWEB-INFlib下有该驱动包)拷进iReport-nb-3.6.0platform7lib下,然后按照下面图示进行设置即可:第一:选择工具下面的选项第二:在选项下面的Classpath下面选择addjar,将之前添加的ojdbc14.jar添加进来。完成后下面将显示出来。对其进行选中,最后点确定。重启即可上面的操作是针对连接到oracle数据库的。如果连接sqlservier数据库,则将ojdbc14.jar换成s
23、qljdbc.jar(需要自己找)即可。后面的操作一样。Ø 查询语句有数据的情况下输出报表为空下面仅列出几种可能的情况,如果检查完下面的情况之后还出现这种问题,请自行检查或联系开发部人员。引起问题的根本原因在于:数据源的数据没有在ireport中体现出来。第一种情况:有可能是jdbc驱动没找到。这种情况,可参考驱动没找到的解决方案解决。第二种情况:没有选对数据源。在ireport 报表工具的菜单栏下方有如下图示的数据源选择框,如果这一框没选对数据源也将导致显示数据为空Ø 如何运用变量,以设置变量统计某一列为例新建一个变量,便可出现下面的变量属性。下面先详细说明各个属性的含义
24、。Reset Group 当组选择Group reset类型时用来指定变量的重置 Custom Incrementer Factory Class 一个叫JRIncrementerFactory接口的java扩展类用来定义像总计一个非数值类型的操作; Variable Expression 用来识别输入值的java表达式。我们经常在这个属性里面设置对列的统计。 Initial Value Expression 用来给变量初始化一个值的表达式下面以统计一列为例说明。其他的类似。第一:新建一个变量:MONEY_COUNT第二:对变量属性进行设置,对变量的表达式进行赋值第三:将该变量放入报表中输出报
25、表即有其效果。其他的如统计行数,取最大值,最小值,平均值等等类似操作即可。Ø 如何制作分组报表² 什么时候用到分组分组,在数据库里面也有group by可实现分组的统计。那何时可用到这里面的分组而不是数据库里面的分组呢?先来说明这两个分组的区别:数据库里面的group by:查询出来的数据集只能是group by的字段信息和对这些字段的统计信息,具体的信息并没有统计出来。比如下面sql:select t.districtcode, count(*)from mis_district tgroup by t.districtcode这里面的数据集局限与districtcode
26、和count(*),其他的信息没有体现出来。分组报表里面的分组:可对那些字段信息进行统计,同时也能将具体的信息显示出来。对上诉的报表效果,完全可以体现出来,并且将其他的信息也体现出来,数据集可采用下面的sql:select*from mis_district t这种情况就可以用到分组表报² 如何制作分组报表第一:首先组织数据源:select *from mis_operatororder by districtcode注意:order by districtcode 这个是必须的(因为我们等会要用它来分组,分组的字段必须用order排序!)第二:新建一个group我们选用distri
27、ctcode字段来分组统计,显示的信息只显示操作员名称和登陆ID号。于是,我们新建一个group,命名为department。右击报表选择add report group即可新建。新建group的过程如下:第三:对其属性进行编辑,选中其header或footer,在右边属性栏对其属性进行编辑然后选中要分组的字段作为其表达式即可。当然,这里不局限于字段,可以是任意合法有效的表达式,更丰富的功能请自行摸索,本例仅讲解基本功能,供参考。第四:查看效果:说明,上图示中下方4的来源。每新建一个组,都会自动生成一个不能修改的变量,用来统计该组的行数,设计时,我们将其放到下方,故出现4,这里只是用来说明,其
28、生成和用途而已,可不用。下面说明分组的属性信息:Group Name 定义组的名字,这个名字将被用来命名和这个组关联的两个band: header和footer; Start on a new column 如果这选项被选择,它允许强制在组的最后将列分开(意思就是新开一个组);如果这个报表仅有一列,这列就将被分开; Start on a new page 如果选择这项,它允许强制在组的最后将页分开(意思就是新开一个页); Reset page number 这个选项可以重设页码在一个新组开始时; Print header 如果选择这项,就可以在所有的页打印组头的内容(如果一个组的内容比需要多页
29、来显示,则在每页上都打印组头); Min height to start new page 如果不是0的话,JasperReports 将在每页打印组, 如果有效的空间被指定为次的空白;通常这是为了避免分割(就像一整段被分开一样); Group Expression 是JasperReports计算记录的表达式;当表达式换一个值时,一个新的组就创建,如果表达式是空的话,既然这样,这个结果就是单一的组的头和单一组的角分在第一列头之后和最后一列角之前; 报表中组的数量可能是任意不确定的,一个组可能被一个父组包含,父组包含其他的子组。结果就是一个组列表。 可以修改一个组与另一个组的关系的优先权,通过
30、右击该组的“Move Group Up” 和“Move Group Down”按钮。 改变组的优先权的意思就改变这这个组的位置。优先权越高,组bands就越远离detail。Ø 如何制作子报表i. 先举例说明什么是子报表:比如一个公司有3个部门,分别为市场部,技术部,研发部。市场部有3名员工:甲、乙、丙;技术部有两个员工:A、B;研发部有3名员工:张、李、赵。A报表为:打印公司的几个部门;B报表为:打印公司的员工;A报表与B报表之间有一个联系,就是B报表中的员工属于公司其中一个部门(假设成立);那么B报表就与A报表有一个联系:部门编号是相同的。于是就可以将B作为子报表嵌套在A报表中。
31、于是就可以设计如下效果的打印:市场部:甲乙丙技术部:AB研发部:张李赵这就是子报表的一个简单例子的说明。ii. 总结子报表概念下面抽象一下上述例子,以方便更普遍的应用A报表相当一个表或视图(甚至是一个任何形式的可用数据源的数据集),简称表AB报表相当另一个表或视图(或另一个相同或不同的可用数据源的数据集),简称表B表A与表B之间有一个或多个相同的字段,我们称其有外键联系,这种情况下,外键联系一般是一对多的形式(如果多对多将显的复杂且统计意义不大,除非有特殊要求)。这两种报表就可以用子报表嵌套父报表来完成。如果还有C报表和B报表也存在这种关系,那么可在B中也嵌套C报表,就构成了多层子报表。iii
32、. 制作子报表的几个前提条件从上面的抽象,我们来总结制作子报表的几个前提条件:第一:父报表和子报表都可独立运行(不要求有相同数据源),之间并没有依赖关系。第二:父报表和子报表必须要联系(一个字段或多个字段取值域相同)第三:要想子报表嵌入父报表,必须在他们之间建立联系(这时就需要用上第二个条件了)只有符合了上述条件,才必要和可以制作子报表。iv. 制作子报表的过程根据上述的抽象和前提条件,我们一步步来具体介绍一个子报表的制作过程我们制作这样一个子报表,左边是供电单位,右边是该供电单位下的操作员a. 先制作两个报表,一个打印供电单位,一个打印操作员如下图示:供电单位报表:Sql:select *f
33、rom mis_district twhere t.districtcode != '00'报表设计:操作员报表:Sql:select *from mis_operator t报表设计:要保证这两个报表都能独立正常运行。b. 给两个报表建立联系先确定两个报表的联系字段。这里的联系字段我们采用DISTRICTCODE即供电单位来联系。首先,我们给子报表设定一个参数(这一步很关键):Pdistrictcode使其sql变为:select *from mis_operator twhere t.districtcode = $Pdistrictcode到此子报表不需要其他设置,除了排
34、版。其次,我们给父报表插入子报表:第一:选择组建模版中的,拖到detail中即可完成插入选择子报表选择数据源选择下一步直至完成。完成一步,不要选择静态路径。完成之后调整子报表被包含在detail中即可。第二:选中子报表,在右边的属性里面对子报表的Parameter属性进行修改: 第三:输出检验:到此,几个基本的子报表制作过程就结束了。下面我们来介绍子报表的几个属性:Subreport expression:这个属性表示子报表的编译文件位置,一般不采用静态的方式赋值,一般赋值如下:$PSUBREPORT_DIR + "SubreportName.jasper",采用根目录+子
35、报表编译文件名称表示子报表的路径Connection type:表示获取子报表的数据集的数据源方式。connection expression:指定内部参数$PREPORT_CONNECTION作为存储JDBC连接的表达式。Return Value:表示子报表的返回参数。下面我们将具体介绍c. 子报表的返回参数 如果父报表不需要子报表的返回参数,就不需要看这一节的内容了。这一节暂时没有相关资料可以设计返回满意参数。获取的参数总是上一次的返回值,有资料表明要用外部类来实现。暂时不能完成文档编写。如今后有成功者,请完成这里的文档。2009-11-17d. Jsp报表页面的相应设置Jsp报表页面要在
36、setParamter()方法中对子报表的路径参数进行设置。para.SUBREPORT_DIR = "<%=session.getServletContext().getRealPath("/jasper_model").replace("","/")%>" + "/"/如果没设置此项,将报错。Ø 数据源的配置这一节的文字都摘自ireport技术手册datasource是一个源来自于JasperReports,并取走数据用于打印。这儿有两种类型的datasources:一
37、个是JDBC连接到关系数据库,在这个数据库上执行sql查询,这个对象继承JRDataSource接口,那个,像我们看到的,允许我们去管理详细的数据像这种XML文档或者一个JavaBean。从一个关系数据(通过sql查询)找回数据来打印的这中能力来创建一个报表是非常简单的,因为可以通过鼠标点击“register”查询字段作为报表字段(没有指定每一个单独字段的名字和类型)。iReport可能关联每一个数据库,为数据库提供一个JDBC驱动,并且提出你配置的用来完成从sql查询开始创建一个报表的向导。当你不想存取数据通过JDBC (或者当你不想JasperReport不直接影响数据库),这时就需要用到
38、JRDataSource (JasperReports数据源),这是一个接口允许存取数据好象他们被构造在表格中,被组织在lines和columns上 (lines是datasource指定的记录,columns是记录的字段)。The JDBC连接或者JRDataSource不是通过JasperReports创建的,但是是通过调用报表的应用程序生成的。这个程序将传递JasperReports的fillReport方法来打开连接到数据库(一个java.sql.Connection对象)或者由于JRDataSource填充报表的情况。第一个中,JasperReports将使用提供的JDBC连接去执行
39、sql查询指定在报表中(明显的这个查询仅仅在你使用这种方法时想打印报表而指定)。查询的结果被包含在被JRResultSetDataSource的指定的JRDataSource中。以这种方式, JasperReports用JRDataSource对象联合这些数据去打印,表示一般的用这个库管理数据打印的接口。在这章我们将在iReport的使用和配置时澄清JRDataSource的不同。而且我们将看到如何扩充JRDataSource ;有时扩充datasources需要我们超越JasperReports的限制,就像没有直接的支持交叉报表。1. iReport中的数据源iReport允许我们管理和配置
40、不同类型的datasources来填充报表。以下是存储在iReport中需要我们配置和激活的datasources。你可能使用到的datasources类型:- JDBC connection- XML DataSource- JavaBean Collection Datasource- CSV DataSource- Custom DataSource在报表生成时JDBC连接被打开并立即传递给JasperReports。XML DataSource 允许我们从XML文档中取数据。CSV DataSource允许你打开一个CSV(以逗号分割的值)文件在报表中使用。JavaBean Colle
41、ction Datasource和Custom DataSource允许你打印数据使用java类。Datasources被管理通过菜单 “Datasource Connections /Datasources“ (图10.1), 打开配置连接列表。图10.1技术上connection和datasource是不同的对象 (第一个总是需要一个关系数据库, 但是第二个表示一个简单的接口去存取数据结构在任意的表单中)。然而现在我们将使用这两个相似的单词。即使我们保持任意数量的datasources准备去用,iReport工作仅仅使用一个源或连接。设置“active” datasource, 选择主窗口
42、菜单“Build Set the active connection” 并选择想要的datasources从提示列表中(图10.2)。图10.2如果没有datasource被选择,就不可能为报表提供数据。用报表向导配置一个能起作用的JDBC连接(仅仅一个允许执行sql查询)。2. JDBC连接iReport 数据库连接需在JaspersoftiReport-nb-3.xplatformxlib路劲下加入ojdbc14.jarJDBC (Java Database Connectivity)连接允许我们去使用作为一个关系DBMS (或者无论那种更接近通过JDBC驱动的) driver). To
43、set a设置一个新的JDBC连接,按“New”按钮依照图10.1提供的,将打开一个新的界面创建一个新的连接(或datasource)。图10.3首先为这个连接命名(可以用一个有意义的名字,像“Mysql Test”)。iReport将使用这个指定的名字进行连接。JDBC Driver区域是用来指定连接数据库的JDBC驱动的名字。这个选择框包含了常用的JDBC名字。警告! iReport仅仅装载了Mysql和HSQLDB的JDBC驱动。幸亏JDBC URL Wizard, 他可以自动的构造JDBC URL来连接数据库通过插入服务名和数据库名在恰当的textfield。按Wizard按钮创建UR
44、L。插入用户名和密码去存取数据库。意思就是一个选择框可能保存连接密码。警告! iReport将密码保存在清晰的配置文件并加载到<USER_HOME>/.ireport/config.xml如果密码是空的,最好保存它。插入所有的数据以后,需要按“Test”按钮来校验连接。如果一切都ok,将会出现以下提示:图10.4测试后,记着设置创建连接作为“active connection”去使用。如果测试失败,可能是以下这些原因:- ClassNotFoundException- URL不正确- 连接参数不正确(Database not found, user or password wron
45、g, etc.)² ClassNotFoundException这个异常出现当所需要的JDBC驱动在CLASSPATH中不存在,比如我们创建一个Oracle数据库连接。iReport缺省驱动中没有oracle的,但是在JDBC驱动列表中存在oracle.jdbc.driver.OracleDriver驱动,事实上当你测试连接时就会出现这个异常: 图10.5我们并没有将oracle的JDBC驱动加到CLASSPATH(这里JVM可以搜索到的类)中,它是一个名叫classes12.zip的文件(或者老版本的classes11.zip). 当作iReport使用自己的Class Loade
46、r,需要拷贝完整的classes12.zip文件到iReport的lib目录下,然后重新测试就不会发生异常了。Lib目录是插入jar档案的正确地方(扩展名为jar或zip)。如果这个驱动不是jar版本的,它就被作为未知目录加载(例如,com目录包含所有驱动类的级数),最正确的地方去动态的加这些类到CLASSPATH就需要拷贝驱动目录到classes目录(iReport的主目录)² URL不正确如果指定一个错误的URL(例如指定一个错误类型的),不会发生什么事当你按“Test”按钮时。事实上会抛出一个StackOverflowError异常(堆栈报告被打印在控制台或者shell中在iR
47、eport被打开时)。既然这样,最好还是用URL向导来建这个JDBC URL,然后再试一次。² 连接参数不正确这个错误是比较少见点的,它是你在建立数据库连接时用了错误的参数时发生的(用户名或密码无效,数据库不存在,等)。这个错误或多或少是比较直观的连接错误。² 使用JDBC连接当使用JDBC创建报表时,用户指定一个sql查询从数据库中查询记录用来打印。这个连接也能被在子报表或这例如,通过个性化的查找功能为详细的数据码。为这个原因, JasperReports安置我们的配置作为指定的参数,名字叫REPORT_CONNECTION,类型为java.sql.Connection,
48、这个参数能被随意的使用,它的语法格式:$PREPORT_CONNECTION这个参数包含在正确的java.sql.Connection类传递给JasperReports来自于calling程序。JDBC 或SQL 连接看来是最简单和容易的方法用来填充报表。如何创建sql查询将在第11章解释。² 字段注册为了能使用sql查询字段在报表中,需要去“注册”他们(需要注册所有已经选择的字段,以便能有效的使用)。每一个字段都需要指定名字和类型。以下是sql类型影射到相应的java类型:SQL typeJAVA objectCHARStringVARCHARStringLONGVARCHARSt
49、ringNUMERICjava.math.BigDecimalDECIMALjava.math.BigDecimalBITBooleanTINYINTIntegerSMALLINTIntegerINTEGERIntegerBIGINTLongREALFloatFLOATDoubleDOUBLEDoubleBINARYbyteVARBINARYbyteLONGVARBINARYbyteDATEjava.sql.DateTIMEjava.sql.TimeTIMESTAMPjava.sql.Timestamp表格10.1这个表格中的BLOB和CLOB类型不像其他指定的类型,像ARRAY, STRUC
50、T, REF, 等. 这些类型不能被JasperReports管理(然而可能用他们通过一般的对象声明,也可以管理他们通过写一些支持静态方法。BINARY,VARBINARY和LONGBINARY类型应该用类似的方法。)可以在java对象中依靠JDBC驱动包含sql类型。用iReport影射自动的注册sql查询字段更为简单比表中提到的。3. JRDataSource接口进行探索datasources的不同之前,需要理解JRDataSource接口工作。每个JRDataSource都必须实现这两个方法:public boolean next()public Object getFieldValue
51、(JRField jrField)第一个方法是用来移动有用的指针到下一条记录:事实上我们说的那些数据被JRDataSource展示在表格中。Next方法返回true,如果指针正确指到后来的记录上时,但如果指到无效记录上,将返回false。JasperReports每次执行next时,所有的记录被重新的填充到报表,所有的表达式(从那些关联的变量开始)被适当的计算; 随后将决定是否打印新组的头,以及新页,等。当next返回false时,报表就结束所有bands的打印(group footer, column footer, last page footer and the summary). ne
52、xt能被调用许多次。getFieldValue is方法在next方法返回true以后被调用。 事实上,getFieldValue is 被执行为每个在报表中显示的字段(看第7章如何声明报表字段)。访问一个已经被传递的作为参数的JRField对象;它就是你像获得的字段值的名字,一个你期望得到的一个java类型对象以及这个字段的描述(不是去指定一些有用的datasource信息来取得字段值)。getFieldValue方法的返回值的类型被适当的公告在JRField参数中,除非它返回一个null值。这些可能的返回值类型有: java.lang.Object, java.lang.Boolean,
53、java.lang.Byte,java.util.Date, java.sql.Timestamp, java.sql.Time, java.lang.Double,java.lang.Float, java.lang.Integer, java.io.InputStream, java.lang.Long,java.lang.Short, java.math.BigDecimal, java.lang.String. 如java.lang.Object is被请求作为返回值的类型,这个方法就能返回任意类型。这个例子中的datasource不作为简单类型字段 (作为一个数据库记录的产生), 但
54、仅仅一个字段来自于java对象和被用在表达式中通过一个例子: 在第7章一 字段被描述作为例子:它的语法格式是:(it.businesslogic.Person)$FMyPerson)因为这个字段类型是被解释器知道的类型而被简单的作为Object.4. JavaBean作为数据源这个datasource允许我们使用一些JavaBeans作为数据来填充报表。JavaBean是一个java类,它里面都是些“getter”方法:public <returnType> getXXX()<returnType> (返回值) 是一个普通的java类或一个简单类型(像int,doubl
55、e,等)。为了创建这个类型的连接,选择下图(图10.6)中的第一个选择框的值为“JavaBean set datasource”。图10.6再一次要做的第一件事是指定这个新的datasource的名字。JavaBean将一个外部类(被叫做Factory)作为datasource来生成包含为报表提供数据的对象(JavaBean)输入你的java类(全名被指定在Factory class字段中),这个类有一个静态的方法来表示不同的JavaBeans 并返回他们作为收集器(java.util.Collection)或一个数组(Object)。这个方法的名字和返回类型被指定在这个窗口的其他地方。让我们
56、看看如何写这个工厂类。假设你的对象是Person ;以下是这个类的代码,包含两个字段: name (这个人的名字) and age.public class Personprivate String name = ""private int age = 0;public Person(String name, = name;this.age = age;public int getAge()return age;public String getName()return name;这个类我们命名为TestFactory,它的结果类似于下面的结果:publi
57、c class TestFactorypublic static java.util.Collection generateCollection()java.util.Vector collection = new java.util.Vector();collection.add(new Person("Ted", 20) );collection.add(new Person("Jack", 34) );collection.add(new Person("Bob", 56) );collection.add(new Person
58、("Alice",12) );collection.add(new Person("Robin",22) );collection.add(new Person("Peter",28) );return collection;datasource将表现5个Person类型的JavaBeans:Factory name: TestFactoryDataSourceFactory class: TestFactoryMethod to call: generateCollectionReturn type: Collection of JavaBean² J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 租借储罐协议书
- 财产分清协议书
- 教学工作室合同协议书
- 聘用养花协议书
- 用电合伙协议书
- 管理导购协议书
- 正规劳务工合同协议书
- 收购二手房合伙协议书
- 职工死亡协议书
- 调解病房协议书
- “成于大气 信达天下”-成信校史课程知到课后答案智慧树章节测试答案2025年春成都信息工程大学
- 钢箱梁焊接作业指导书
- GB 34660-2017道路车辆电磁兼容性要求和试验方法
- BB/T 0034-2017铝防盗瓶盖
- 国家义务教育质量监测科学模拟测试题附答案
- 12-1限度样品管理办法
- UI界面设计交互设计教学
- 主要股东或出资人信息及投标人基本情况表模板
- 钢箱梁计算分析与案例详解
- 绞肉机的设计本科生毕业论文
- 山东省某房地产开发项目建设节能评估报告
评论
0/150
提交评论