在使用java报表工具时如有一个参数查询语句:SELECT * FROM Stscore WHERE Stdno IN (${studentno})。实际情况中studenno可能是根据其他条件查询出来的结果列表,也许超过1000个学号,如最终为
SELECT * FROM Stscore WHERE Stdno IN (10001, 10002, 10003, 10004, 10005, 10006, 10007, 10008, 10009, 10010, 10011, 10012, 10013, ……,10989, 10990, 10991, 10992, 10993, 10994, 10995, 10996, 10997, 10998, 10999, 11000,11001)
直接执行上述语句,由于studentno参数的个数超过了1000个,数据库端将报ORA-01795的错误,如下图
http://www.finereport.com/forumimages/e440.png
如何解决该问题呢?此时,如果将studentno参数分割成多段,如以500为单位进行分割,将上述11001个参数值分为3部分,形成3条查询条件,便可避免该问题。
即变为SELECT * FROM Stscore WHERE Stdno IN (10001,10002,…,10500) or Stdno IN (10501,10502,…,11000) or Stdno IN (11001)
FineReport并没有实现该功能的内置函数,对于这种情况,我们可以自定义一个SubSection分组函数 该函数的使用规则为:SubSection(para)
参数para为字符串形式,该函数的作用即将字符串参数以500为单位进行分割,并返回分割后形成的数组。
完整代码如下:
http://www.finereport.com/forumimages/e441.png
http://www.finereport.com/forumimages/e442.png
编译自定义函数
将编译后的SubSection.class放到FineReport的安装目录WEB-INF下面的classes目录下,因为SubSection.java属于包com.fr.demo,所以SubSection.class需要放到classes\com\fr\demo目录下。
注册并使用自定义函数
注册好定义的函数后便可进行使用了,注册与使用方法在上一节简单的自定义函数中已经介绍过,在此就不详细描述了。由于实际获得的参数格式不定,可以根据具体情况在报表工具中调整java程序。
文章转自:
了解Java报表工具就从这里开始
posted on 2011-09-21 15:46
season 阅读(240)
评论(0) 编辑 收藏 所属分类:
Java报表—技术知识