Chinaunix首页 | 论坛 | 博客
  • 博客访问: 100889816
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-23 17:34:22

作者: Dustin Marx/Michael G. Martin 出处:  
 

示例2:使用三维饼形图间接绘制 HR 模式数据图表

在第一个示例中,通过使用面向 JDBC 的数据集直接检索的数据集构造了一个饼形图。  特定的实现是使用提供的数据库连接和 SQL 查询语句构造的。然而,有时可能无法使用或者不希望使用面向 JDBC 的数据集。例如,JFreeChart 仅为 PieDataset、CategoryDataset 和 XYDataset 子接口提供面向 JDBC 的数据集实现。可能还存在这样的情况:很难以适合 JFreeChart 的格式从数据库中提取数据,必须先在 Java 代码中进行一些数据操作。最后,可能不希望图表生成与数据库查询紧密耦合。无论上述哪种情况,都可改用非面向 JDBC 的数据集。清单 3 演示了如何针对三维饼形图实现该操作。

清单 3: 手动构造数据集并生成 JPG 图表

JFreeChart pieChart3D = null;

final DefaultPieDataset pieDataset = new DefaultPieDataset();

/* Query used by getNumberEmployeesByLocation() method:

SELECT locations.city, count(*) AS num_employees
FROM departments, employees, locations 
WHERE employees.department_id = departments.department_id
AND departments.location_id = locations.location_id
GROUP BY locations.city
      */

Map empsAtEachLocation= 
databaseAccess.getNumberEmployeesByLocation();

for ( Map.Entry numEmpsAtLoc :empsAtEachLocation.entrySet() )
      {
pieDataset.setValue(
numEmpsAtLoc.getKey().toString(),
Integer.parseInt(numEmpsAtLoc.getValue().toString()) );
      }

pieChart3D = ChartFactory.createPieChart3D( TITLE_EMPS_PER_LOC,
pieDataset,
true,
true,
false );

final String fileName = "EmpsPerLocPieChart3D.jpg";
try
      {
ChartUtilities.writeChartAsJPEG( new FileOutputStream(fileName),
aChart,
aWidth, aHeight);
      }
catch (IOException ioEx)
      {
System.err.println( "Error writing JPG file " + fileName);
      }

清单 3 中的代码比第一个实例中所需的代码略微冗长一些,因为它没有利用针对饼形图的 JDBC 数据集,而是将 Map 条目从其数据库存取器 (databaseAccess.getNumberEmployeesByLocation) 复制到一个被传递给 createPieChart3D 方法的 DefaultPieDataset 中。尽管这段代码比第一个实例所需的代码长,但它的优点是无需处理 SQLException,而且与数据库查询的的直接耦合程度也没那么高。

该示例还生成一个 JPEG (.jpg) 文件,而非第一个实例中生成的图像之类的 PNG (.png) 文件。这两个文件都是图像文件格式,这两个示例都显示了将一个图表写出到任何一种图像格式是多么容易。图 6 中显示了作为运行清单 3 中的代码的结果创建的实际 JPEG 图像。

图6:从数据库创建的 JPEG 格式的三维饼形图

这种数据图形表示打动您的一点就在于大多数员工在南圣弗朗西斯科、牛津或西雅图工作。

由于使用面向 JDBC 的数据集无需从 Java 集合或结果集转换为 JFreeChart 所需的数据集格式,因此在可能的情况下,我们将在本文的其余部分都使用该方法以保持简单。然而如前所述,存在这样的情况:由于数据库访问与图表生成之间的强耦合,该方法无法实现或者不是所需要的。同样,尽管使用面向 JDBC 的数据集时需要捕获检查到的 SQLException 异常,但我们在本文后面的代码清单中将省略大多数异常处理代码。

阅读(249) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~