我做了一个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
答案 0 :(得分:1)
来自JDBCCategoryDataset
上的Javadoc:
第一列是类别名称和剩余列值(每列代表一个系列)。
因此,如果您将第二个产品的价格放在第三列,那应该可以正常工作。
但是,如果由于架构或数据限制而无法做到这一点,那么您可以使用其他几个选项:
DefaultCategoryDataset
作为JDBCCategoryDataset
最接近的内容并手动填充。TimeSeriesCollection
作为数据集是合理的。它是Time Series
(惊喜!)的集合,每个Time Series
是(日期,值)点的集合,将在图表上作为一条线绘制。 Abstract Dataset
并提供渲染器,但这需要相当多的背景知识,并且在需要非常重要的东西时保留。 (但是学习JFreeChart很有用)我会使用选项2.它的片段可能如下所示:
TimeSeriesCollection timeSeries = new TimeSeriesCollection();
TimeSeries product1 = new TimeSeries("product1");
new JDBCTemplate("query", params, new ResultSetExtractor<Void>() {
public Void extractData(ResultSet rs) throws SQLException {
product1.addOrUpdate(new FixedMillisecond(rs.getLong(1)), rs.getDouble(2));
return null;
}
}
<other products to follow>