反饋已提交
網絡繁忙
数据库表,其中字段 XML 所存的为 XML 格式数据在表 xmltest 中,如下图,在使用该表进行报表制作时,需要将存于XML 字段中的值读取出来作为报表数据源。
XML 每条记录数据格式如下:
<Field><Name>MemoryFreeSize</Name><Type>int</Type><Value>1962</Value></Field> <Field><Name>MemoryTotalSize</Name><Type>int</Type><Value>2047</Value></Field> <Field><Name>MemoryUsage</Name><Type>int</Type><Value>4</Value></Field>
<Field><Name>MemoryFreeSize</Name><Type>Int</Type><Value>1999</Value></Field> <Field><Name>MemoryTotalSize</Name><Type>Int</Type><Value>2048</Value></Field> <Field><Name>MemoryUsage</Name><Type>Int</Type><Value>10</Value></Field>
<Field><Name>MemoryFreeSize</Name><Type>Int</Type><Value>2000</Value></Field> <Field><Name>MemoryTotalSize</Name><Type>Int</Type><Value>2050</Value></Field> <Field><Name>MemoryUsage</Name><Type>Int</Type><Value>15</Value></Field>
最终用于制作报表的数据源形式如下:
对于这样的情况我们如何来实现呢?FineReport 中可以通过自定义程序数据集来对 XML 字段数据进行解析,最终返回所希望的数据表。实现步骤如下:
FineReport 报表的数据来源可以是任何类型的数据,因为 FineReport 是通过 AbstractTableData 抽象类来读取数据源的,因此用户只要实现了 AbstractTableData 抽象类,也就可以用自定义类型的程序数据集,AbstractTableData 抽象类主要有5个方法,具体使用可参考 简单程序数据集 实现原理文档,数据来源是通过把xml格式数据转入 ArrayList 中。
连接目标数据库后,执行sql查询语句,将 xmltest 表数据全部查询出来,对于 ID、NAME 字段的值我们将其直接存于新的结果集 ArrayList 中,对于 XML 字段我们通过GetXmlDate类对其进行解析后再转入 ArrayList 中。
GetXmlDate 类代码详见:
https://code.fanruan.com/demo/example/src/release/10.0/src/main/java/com/fr/data/GetXmlDate.java
定义类 XMLRead.java,继承 AbstractTableData 接口,实现 getColumnCount、getColumnName、getRowCount、getValueAt 四个方法;XMLRead.java 类代码详见:
https://code.fanruan.com/demo/example/src/release/10.0/src/main/java/com/fr/data/XMLRead.java
注:上述代码中的数据库连接需要改成你自己存放 xmltest 表的数据库
首先编译 GetXmlDate.java 然后再编译 XMLRead.java,将生成的 class 文件放于WEB-INF/classes/com/fr/data下。
新建报表,报表数据集>程序数据集,选择我们定义好的程序数据集 XMLRead.class 文件,名字可以自定义,如 ds1。
制作报表保存为 xmlread.cpt,如下:
B/S 访问报表,效果如下:
数据库表字段为 XML 类型的数据就可以转换报表数据源了。
文 檔回 饋
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉