最后一个示例演示如何基于 XML 数据创建 JFreeChart。在本示例中,我们将使用 Oracle 数据库支持以 XML 形式返回表中的数据。通常,当我们只使用 JDBC 数据集即可直接处理关系数据时,我们并不希望将关系数据转换为 XML 进行 JFreeChart 处理。但是,该关系到 XML 转换的特性在本示例中却很有用,因为利用该特性,我们可以使用 HR 模式模拟面向 XML 的数据源。许多源都可以 XML 格式提供数据,包括 XML 数据库(如存储 XML 文档而非传统的标准化关系数据的 Oracle 数据库)、XML Web 服务以及其他产品和库。
在本示例中,我们将收集 HR 模式中有关员工佣金率的信息。我们在此处假定表中佣金值为空的员工没有佣金补偿,因此只绘制了确实收到佣金的人员的佣金率图表。清单 14 显示了与此相关的一般关系数据查询。
清单 14:用于佣金查询的 SQL SELECT
SELECT commission_pct, count(commission_pct) FROM employees WHERE commission_pct IS NOT NULL GROUP BY commission_pct ORDER BY commission_pct; |
清单 14 中的查询返回收到各个佣金级别(百分比)的员工的人数。总计中不包括未收到佣金的员工。
我们需要提供给 JFreeChart 以生成我们的图表的 XML 数据需要满足 JFreeChart 期望的 XML 语法。在清单 15 中,我们显示了一个在清单 14 中首次列出的查询的修改版本,它部分满足 JFreeChart 对 XML 语法的期望。
清单 15: 使用列别名将查询结果与 JFreeChart 期望的 XML 相匹配
SELECT commission_pct AS "Key" count(commission_pct) AS "Value" FROM employees WHERE commission_pct IS NOT NULL GROUP BY commission_pct ORDER BY commission_pct |
这个新版本的查询重命名在 SELECT 语句中返回的列或使用该列的别名。我们现在不使用 commission_pct 和 count(commission_pct) 作为列标题,而改用这两个列标题的别名,分别称为 Key 和 Value。
虽然清单 15 对该查询进行了修改,但是我们仍然不能以 XML 格式检索数据。清单 16 提供了使用 OracleResultSet 以 XML 格式检索数据库中的数据的 Java 代码。
清单 16: 以 XML 格式获取 Oracle 数据库中的数据
/**
* Get commission percentage breakdown from database.
*/
public String getCommissionPercentageBreakdownAsXml()
{
final String QUERY_NUMBER_EACH_COMMISSION_LEVEL =
"SELECT commission_pct AS \"" + DatasetTags.KEY_TAG + "\", " +
"count(commission_pct) AS \"" + DatasetTags.VALUE_TAG + "\" " +
"FROM employees " +
"WHERE commission_pct IS NOT NULL " +
"GROUP BY commission_pct " +
"ORDER BY commission_pct";
OracleXMLQuery qry =
new OracleXMLQuery( getOracleDbConnection(),
QUERY_NUMBER_EACH_COMMISSION_LEVEL);
qry.setRowTag(DatasetTags.ITEM_TAG);
qry.setRowsetTag(DatasetTags.PIEDATASET_TAG);
return qry.getXMLString();
} |
在清单 16 中,我们使用 JFreeChart 提供的静态常量(DatasetTags.KEY_TAG 和 DatasetTags.VALUE_TAG)而非两个列标题的硬编码值(Key 和 Value),因此,在 JFreeChart 的以后版本中,该查询仍将保持与这些常量的任何更改同步。
清单 16 显示了如何使用 OracleXMLQuery 以 XML 格式获得查询数据。setRowTag 和 setRowsetTag 调用很重要,因为利用通过它们,我们可以轻松更改行标记和行集标记以与满足 JFreeChart 期望。如前所述,我们使用 JFreeChart 提供的常量(DatasetTags.ITEM_TAG 和 DatasetTags.PIEDATASET_TAG)指定这些标记的名称。最后,在我们的 OracleXMLQuery 实例上调用 getXMLString 方法以完备的 XML 格式返回所有结果。清单 17 显示该生成的 XML 字符串的内容。
清单 17: 通过 Oracle 数据库查询生成的 JFreeChart 兼容 XML
<?xml version = '1.0'?> <PieDataset> <Item num="1"> <Key>0.1</Key> <Value>6</Value> </Item> <Item num="2"> <Key>0.15</Key> <Value>5</Value> </Item> <Item num="3"> <Key>0.2</Key> <Value>7</Value> </Item> <Item num="4"> <Key>0.25</Key> <Value>6</Value> </Item> <Item num="5"> <Key>0.3</Key> <Value>7</Value> </Item> <Item num="6"> <Key>0.35</Key> <Value>3</Value> </Item> <Item num="7"> <Key>0.4</Key> <Value>1</Value> </Item> </PieDataset> |
如上面提到的,DatasetTags 常量用于提供 JFreeChart 期望的标记名称 PieDataset、Item、Key 和 Value。由于有了 OracleXMLQuery 类、使用返回列的别名的能力以及 JFreeChart 提供的常量,我们现在已经准备好 XML 文档可以将其填充到 JFreeChart 饼形图中了。
清单 18 显示如何使用 JFreeChart 的 DatasetReader 相应地将准备好的 XML 作为输入数据用于图表生成。
| 共13页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] 11 [12] [13] 下一页 | |||||||||||||||
|
|
||||
| · NAC安全访问控制 · 网络布线测试仪器 · Windows Server 2008专.. · Windows远程桌面应用 · 网络故障排除宝典 · 运营商封堵ADSL共享 中.. · 解析35岁技术人的价值.. · 世纪枭雄比尔盖茨的王.. |
· 主流品牌防火墙配置 · ASP.NET开发教程 · 超级计算机TOP500专题 · Vista SP1对决XP SP3 · SQL Server 2008/2005.. · 程序员如何成长? · C#技术开发指南 · 虚拟化技术还有点“虚” |
|||
|
||||
| · SOA 面向服务架构 · SQL Server 2008/2005.. · Apache技术专题 · 三层交换技术专题 · SQL Server入门到精通 · Windows远程桌面应用 · C#技术开发指南 · Apache技术专题 |
· Windows集群服务应用 · C#技术开发指南 · 国际文档格式标准开战 · 路由器设置与口令恢复 · Linux 集群技术专题 · PHP开发应用手册 · SOA 面向服务架构 · 企业数据恢复指南 |
|||
|
||||
| · SQL Server入门到精通 · SQL Server 2008/2005.. · SOA 面向服务架构 · Apache技术专题 · C#技术开发指南 · 三层交换技术专题 · Apache技术专题 · C#技术开发指南 |
· Windows远程桌面应用 · 企业数据恢复指南 · Windows集群服务应用 · 路由器设置与口令恢复 · Linux 集群技术专题 · SOA 面向服务架构 · 了解统一威胁管理(UTM).. · 反垃圾邮件技术应用 |
|||