CharlieShen

新人,大家多关照啦@_@

  博客中心 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 登录 ::
  3994 随笔 :: 0 文章 :: 20 评论 :: 0 Trackbacks
Cached @ 2025/4/26 5:42:03Control ASP.skins_cogitation_controls_blogstats_ascx
<2025年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

留言簿(14)

随笔档案

文章档案

搜索

最新评论

阅读排行榜

评论排行榜

Cached @ 2025/4/26 5:42:03Control ASP.skins_cogitation_controls_singlecolumn_ascx

对数据源的支持

iReport报表引擎需要从数据源获取报表中的数据。而最基本的查询数据源的方法就是SQL查询语句,一个报表只支持一个查询结果集,设计一个报表的核心内容就是设计SQL语句。如果一个报表在不同条件使用完全不同的数据库表查询语句,一般在报表程序中形成SQL语句,并查询得到结果集,再将所得结果集传递给报表引擎形成报表。这样虽然很灵活,但使报表程序冗长复杂,不便维护。最好是将SQL写在报表数据源内,运行时将数据库连接和其他必要参数传递给报表引擎,由报表引擎执行SQL语句并生成报表。

由于报表只支持单一结果集,对较为复杂的报表,SQL语句的设计就需要较高技巧。简单的参数如数字可直接传递,在报表的SQL语句中用参数表示,如查询条件where x=$P{y},实际使用时程序中直接将参数值如“10”传递给报表引擎,执行时就可以当做where x=10执行。较为复杂的参数可用$P!{param},可用于替代SQL语句的任何部分,如在不同条件下使用不同的字段排序,可在报表SQL中写order by $P!{y},实际使用报表时可将实际的值如“a,b”或“b desc”传递给报表引擎,实际执行时就当做“order by a,b”或“order by b desc”排序子句执行,参数使用是SQL语句灵活支持多种需要的最重要手段。

绝大部分参数是字符串格式,偶然需要日期格式的参数,iReport中设缺省值比较复杂,如“2007年2月28日”要写成“(new SimpleDateFormat("yyyy-MM-dd")).parse("2003-01-01")”,要使用Java函数形式,实际上iReport中所有设定表达式都要显式使用Java函数。

对于涉及多个表查询的情况,需要使用联合查询语句join和union,join用语横向联结多个表,而union用于纵向合并相同结构表的结果集。可以使用子查询技术,即将一个查询语句当做临时表再进行查询,或与其他表联合查询。

通过以上各种技术,在各种条件下,最终形成一个单一数据结果集,形成报表。对于报表各个记录来自完全不同来源的情况,可考虑使用非SQL基本数据源,如可用“JavaBean Data Source”。定义一个基本类,声明各个字段类型及getXXX()、setXXX()方法。测试报表时,建一个数据类,用JRBeanCollectionDataSource(list)封装,其中用list加入测试数据。将class打包考入iReport/lib目录下,在iReport新建数据源,类型为JRDataSourceProvider,类名为刚才定义的类,就可用该类提供测试数据测试报表。打包时注意两点,编译和打包使用的jar的Java版本要与安装iReport时Java版本一致,特别在电脑上装有多个版本的Java时。实际使用报表时,也是使用list先动态填充数据,fill报表时传递数据源为new JRBeanCollectionDataSource(list)即可生成动态报表。

分享按钮发布于: 2007-09-20 12:38 CharlieShen 阅读(2382) 评论(2)  编辑 收藏