相信动态列的实现困扰了不少人,大数据量,多字段的加载将会很是耗时,数据又作不到真正的动态灵活。现有的方式都是经过变向的隐藏等方式来实现。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。
能够很清晰的看到效果,选择哪一个列,它就只查询那个列,只展现哪一个列的数据,这就是动态列的实现方案。你们能够依据个人逻辑,替换成本身的数据链接库、表数据进行测试使用体验!