在使用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 閱讀(263)
評論(0) 編輯 收藏 所屬分類:
Java報表—技術知識