天天看點

帆軟FineReport如何使用程式資料集

大多數情況下,FineReport直接在設計器裡使用“資料集查詢”,直接寫SQL就能滿足報表要求,但對于一些複雜的報表,有時候SQL處理并不友善,這時可以把查詢結果在應用層做一些預處理後,再傳遞給報表,即所謂的“程式資料集”,FineReport的幫助文檔上給了一個示例:

帆軟FineReport如何使用程式資料集
帆軟FineReport如何使用程式資料集

View Code

這個示例我個人覺得有二個地方不太友善:

1、db連接配接串寫死寫死在代碼裡,維護起來不太友善,目前大多數b/s應用,對于資料庫連接配接,通常是利用spring在xml裡配置datasource bean,運作時動态注入

2、将查詢出的結果,填充到資料集時,采用的是數字索引(見82行),代碼雖然簡潔,但是可讀性比較差

折騰一番後,于是便有了下面的改進版本:

帆軟FineReport如何使用程式資料集
帆軟FineReport如何使用程式資料集

改進的地方:

1、getConnection方法,利用Spring注入datasource,當然為了注入友善,還需要一個輔助類AppContext

帆軟FineReport如何使用程式資料集
帆軟FineReport如何使用程式資料集

classes/spring/root-context.xml 裡配置db連接配接

帆軟FineReport如何使用程式資料集
帆軟FineReport如何使用程式資料集

2、将原來的數組,換成了LinkedHashSet<LinkedHashMap<String, Object>>,這樣db查詢結果填充到"資料集"時,處理代碼的可讀性就多好了(見queryData方法),但也要注意到LinkedHashSet/LinkedHashMap的性能較Array而言,有所下降,正所謂:有所得必有得失。但對于複雜的彙總統計報表,展示的資料通常不會太多,是以這個問題我個人看來并不嚴重。