如何使用mysql和java在jfreechart数据集中返回多行

8aqjt8rx  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(340)

我用一条线创建了一个图形,连接到数据库,如下所示。
我刚刚使用了一个返回查询数据的数据集。我需要在不同的数据集中显示更多的行来创建这种思想,但不知道如何实现它,甚至不知道它是否可行。
我见过多行图的例子,但是没有一个能帮助我实现我想要的,那就是返回值​​从数据库。

String query="select date,tempfrom records where idSensor like 'Sensor1'";
JDBCCategoryDataset dataset = new JDBCCategoryDataset(CriaConexao.getConexao(),
        query);
JFreeChart chart = ChartFactory.createLineChart("Records", "date", "temp", 
        dataset, PlotOrientation.VERTICAL, false, true, true);
BarRenderer renderer = null;
CategoryPlot plot= null;
renderer=new BarRenderer();
ChartFrame frame = new ChartFrame("Records", chart);
frame.setVisible(true);
frame.setSize(400,650);
vhmi4jdf

vhmi4jdf1#

来自javadoc的 JDBCCategoryDataset :
sql查询必须至少返回两列。第一列将是类别名称和剩余列值(每列表示一个系列)。对executequery(string)的后续调用将刷新数据集。
因此,您应该在查询中添加列:

String query = "SELECT date, value1, value2, value3, value4 FROM records WHERE " +
               "idSensor LIKE 'Sensor1'";

您也可以在sql中执行子选择:

String query = "SELECT date, value1, (SELECT value2 FROM table2 WHERE " +
               "records.date = table2.date), value3, value4 FROM records WHERE " +
               "idSensor LIKE 'Sensor1'";

如果这还不能给您足够的灵活性,请参考javadoc的下一条建议:
注意:许多人发现这个类在一般使用中限制太多。为了获得最大的灵活性,请考虑编写您自己的代码从结果集读取数据,并直接填充defaultcategorydataset。
---更新---
您可以自动联接(将表与自身联接)将行转换为列,也可以编写自己的代码从结果集读取数据。一种可能的自动加入方法:

SELECT r.date, r1.tempfrom, r2.tempfrom, r3.tempfrom
FROM records r, records r1, records r2, records r3
WHERE r.date = r1.date AND r.date = r2.date AND r1.date = r3.date AND
      r1.idSensor = 'Sensor1' AND r2.idSensor = 'Sensor2' AND r3.idSensor = 'Sensor3';

如果可能的话 idSensors ,你没有 tempfrom 在约会的时候,你需要做一个外部连接。这有点取决于你的数据库,你如何写一个外部连接,所以我不能包括在内。但是先试试这个,看看它是否对你有帮助。

相关问题