相信動態列的實現困擾了不少人,大數據量,多字段的加載將會很是耗時,數據又作不到真正的動態靈活。現有的方式都是經過變向的隱藏等方式來實現。mysql
那該如何解決呢?這裏分享帆軟報表設計器FineReport的實現方案,結合實際工做中遇到的的相關內容。sql
我本地經常使用數據庫是MYSQL,因此比較瞭解一點,因此實現方式也是基於mysql的。首先了解一下MySQL自帶的information_schema數據庫使用。數據庫
你們在安裝或使用MYSQL時,會發現除了本身安裝的數據庫之外,還有一個 information_schema數據庫。information_schema數據庫是作什麼用的呢,使用WordPress博客的朋友可能會想,是否是安裝模板添加的數據庫呀?看完本片文章後,你就會對information_schema數據庫有所瞭解。服務器
information_schema數據庫是MySQL自帶的,它提供了訪問數據庫元數據的方式。什麼是元數據呢?元數據是關於數據的數據,如數據庫名或表名,列的數據類型,或訪問權限等。有些時候用於表述該信息的其餘術語包括「數據詞典」和「系統目錄」。oracle
在 MySQL中,把 information_schema 看做是一個數據庫,確切說是信息數據庫。其中保存着關於MySQL服務器所維護的全部其餘數據庫的信息。如數據庫名,數據庫的表,表欄的數據類型與訪問權限等。在INFORMATION_SCHEMA中,有數個只讀表。它們其實是視圖,而不是基本表,所以,你將沒法看到與之相關的任何文件。函數
information_schema數據庫表說明:工具
擴展的應用sqlserver
selecttable_schema,table_name,table_rows from tables where TABLE_SCHEMA = '數據庫名稱' order by table_rowsdesc;測試
selectconcat(round(sum(data_length/1024/1024),2),'MB') as data_length_MB, concat(round(sum(index_length/1024/1024),2),'MB')as index_length_MB frominformation_schema.tables where table_schema='數據庫名';大數據
selectconcat(truncate(sum(data_length)/1024/1024,2),'MB') as data_size, concat(truncate(sum(max_data_length)/1024/1024,2),'MB')as max_data_size, concat(truncate(sum(data_free)/1024/1024,2),'MB')as data_free, concat(truncate(sum(index_length)/1024/1024,2),'MB')as index_size frominformation_schema.tables where TABLE_NAME = '表名';
看完以後相信可能仍是有點疑惑。就是說mysql中有一個系統庫information_schema。這個庫中存放着mysql數據庫的數據庫實例名,表名稱,表註釋,字段名稱,字段註釋等等等等。而這個庫的存在爲咱們動態列的實現就提供了一個基礎。(其他的數據庫oracle、sqlserver、db2等也有相似的存在。)
而後咱們繼續回到主題。我在本地創建了一個測試庫reporttest,測試表report。在mysql庫中新建一個庫reporttest(或者使用已經存在的庫,可是若是使用已經存在的,那麼報表內部sql內容就須要更改。因此最好新建一個),而後用相似navicat的工具運行我提供的reporttest.sql文件,便可建表而且導入數據,而後刷新便可,此時數據準備完成。
設計器建立數據鏈接test,填寫對應的數據庫信息,測試成功即OK。
此時,庫名稱爲reporttest,表名稱爲report,數據鏈接test。這時直接預覽動態列實現方案.cpt。
能夠很清晰的看到效果,選擇哪一個列,它就只查詢那個列,只展現哪一個列的數據,這就是動態列的實現方案。你們能夠依據個人邏輯,替換成本身的數據鏈接庫、表數據進行測試使用體驗!