如何在freechart Java中添加多行?

我做了一个Java应用程序,需要添加一个图形。 我可以这样做,但我只能在每个图表中添加一个产品(行)。

我希望我能增加更多。

这是我的代码

String query="select date,price from produtcs where idProduct like 'Prod1'"; JDBCCategoryDataset dataset = new JDBCCategoryDataset (CriaConexao.getConexao(),query); JFreeChart chart = ChartFactory.createLineChart(Record of Price", "Date", "Price", dataset, PlotOrientation.VERTICAL, false, true, true); BarRenderer renderer = null; CategoryPlot plot= null; renderer=new BarRenderer(); ChartFrame frame = new ChartFrame("Record of Price", chart); frame.setVisible(true); frame.setSize(400,650); 

图表 – –

在此处输入图像描述

图表中显示的记录———

 idProduct Date Price Pro01 2014-05-29 19.1 Pro01 2014-05-29 18.8 Pro01 2014-05-29 18.7 Pro01 2014-05-29 18.9 Pro01 2014-05-29 18.7 Pro01 2014-05-29 18.5 

我想要的记录显示在图表中———

 idProduct Date Price Pro01 2014-05-29 19.1 Pro01 2014-05-29 18.8 Pro02 2014-05-29 18.7 Pro02 2014-05-29 18.9 Pro03 2014-05-29 18.7 Pro03 2014-05-29 18.5 

我尝试这个查询,但只显示一行

 String query="select date,price from produtcs where idProduct like 'Prod%'"; 

编辑

我编辑了一个新查询:

 SELECT p1.`Date` , p1.`Price` as `Price of Prod01` , p2.`Price` as `Price of Prod02` , concat(p1.idProduct, ' / ', p2.idProduct) idProduct FROM (SELECT idProduct, Date, Price FROM products WHERE idProduct LIKE 'Pro01') p1 LEFT JOIN (SELECT idProduct, Date, Price FROM products WHERE idProduct LIKE 'Pro02') p2 ON p1.Date = p2.Date 

结果是:

  Date Price of Prod01 Price of Prod02 Products 2014-05-29 23.8 23.0 BrgTH001 / BrgTH002 2014-05-29 23.8 23.1 BrgTH001 / BrgTH002 2014-05-29 23.8 22.6 BrgTH001 / BrgTH002 2014-05-29 23.8 22.5 BrgTH001 / BrgTH002 2014-05-29 23.8 22.8 BrgTH001 / BrgTH002 2014-05-29 23.8 23.1 BrgTH001 / BrgTH002 

但结果再一行:S

JDBCCategoryDataset上的Javadoc JDBCCategoryDataset

第一列将是类别名称和剩余列值(每列代表一个系列)。

因此,如果您将第二个产品的价格放在第三列,那应该可以正常工作。

但是,如果由于架构或数据限制而无法做到这一点,那么您可以使用其他几个选项:

  1. 使用DefaultCategoryDataset作为最接近JDBCCategoryDataset东西并手动填充它。
  2. 您似乎正在创建时间序列图(根据日期绘制的值)。 因此,尝试将TimeSeriesCollection作为数据集是合理的。 它是Time Series的集合(惊喜!),每个Time Series都是(日期,值)点的集合,将作为一条线绘制在图表上。
  3. 更通用的方法是使用Abstract Dataset并提供渲染器,但这需要相当多的背景知识,并且在需要非常简单的东西时保留。 (但是学习JFreeChart很有用)

我会使用选项2.它的片段可能如下所示:

 TimeSeriesCollection timeSeries = new TimeSeriesCollection(); TimeSeries product1 = new TimeSeries("product1"); new JDBCTemplate("query", params, new ResultSetExtractor() { public Void extractData(ResultSet rs) throws SQLException { product1.addOrUpdate(new FixedMillisecond(rs.getLong(1)), rs.getDouble(2)); return null; } }