Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从数据库检索以显示为折线图_Java_Mysql_Jdbc_Jfreechart - Fatal编程技术网

Java 从数据库检索以显示为折线图

Java 从数据库检索以显示为折线图,java,mysql,jdbc,jfreechart,Java,Mysql,Jdbc,Jfreechart,我正在尝试显示数据库中的数据。我目前正在一次执行一个查询,以获得每年一个特定的结果。我需要对数据库中的所有列执行此操作,但是这会使代码变得非常混乱。有没有一种更简单的方法可以从数据库中读取数据以显示到折线图 当前代码段: DefaultCategoryDataset dataset = new DefaultCategoryDataset(); String sql = "SELECT SUM(all_motor_vehicles), Year FROM Vehicle WHERE

我正在尝试显示数据库中的数据。我目前正在一次执行一个查询,以获得每年一个特定的结果。我需要对数据库中的所有列执行此操作,但是这会使代码变得非常混乱。有没有一种更简单的方法可以从数据库中读取数据以显示到折线图

当前代码段:

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

String sql = "SELECT SUM(all_motor_vehicles), Year FROM Vehicle WHERE Year = 2005";
pst = con.prepareStatement(sql);
rs = pst.executeQuery();
amount = Integer.parseInt(rs.getString(1)); //get the result
yearFromDB = rs.getString(2);
System.out.println(amount + " " + yearFromDB); //print result


int amount2006;
String yearFromDB2006;
String sql2 = "SELECT SUM(all_motor_vehicles), Year FROM Vehicle WHERE Year = 2006";
pst = con.prepareStatement(sql2);
rs = pst.executeQuery();
amount2006 = Integer.parseInt(rs.getString(1)); //get the result
yearFromDB2006 = rs.getString(2);
System.out.println(amount2006 + " " + yearFromDB2006); //print result

int amount2007;
String yearFromDB2007;
String sql3 = "SELECT SUM(all_motor_vehicles), Year FROM Vehicle WHERE Year = 2007";
pst = con.prepareStatement(sql3);
rs = pst.executeQuery();
amount2007 = Integer.parseInt(rs.getString(1)); //get the result
yearFromDB2007 = rs.getString(2);
System.out.println(amount2007 + " " + yearFromDB2007); //print result

dataset.addValue(amount, allMotorVehicles, yearFromDB);
dataset.addValue(amount2006, allMotorVehicles, yearFromDB2006);
dataset.addValue(amount2007, allMotorVehicles, yearFromDB2007);

JFreeChart chart = ChartFactory.createLineChart("Traffic by Vehicle type", "Vehicle", `"Amount",dataset);`
数据库中的信息片段:

执行建议的查询时出现SQL错误:

在数据库中执行查询返回:

我可以使用rs.getString1检索2005年,使用rs.getString2检索对应的数字,但是当我尝试通过rs.getString3和rs.getString4检索2006年及其数字时,我会得到一个SQLException错误

String sql = "SELECT Year, SUM(all_motor_vehicles) AS allmotor\n" +
          

"FROM Vehicle\n"
            + "WHERE Year IN (2005, 2006, 2007)\n"
            + "GROUP BY YEAR;";
    pst = con.prepareStatement(sql);
    rs = pst.executeQuery();

    amount = Integer.parseInt(rs.getString(2)); //retrieves amount
    yearFromDB = rs.getString(1);
    System.out.println(amount + " " + yearFromDB); //retrieves year (2005)
    
    System.out.println(rs.getString(3) + " " + rs.getString(4)); //gives me an SQL ERROR

相反,您应该执行单个GROUP BY查询,在该查询中按年份汇总销售额:

选择年份,将所有汽车作为所有销售 来自车辆 2005年、2006年、2007年,或者你想在报告中写的任何年份 逐年分组;
我不会为上面的查询提供样板JDBC代码,因为您似乎已经掌握了这方面的基本知识。请注意,我为SUM提供了一个别名,以防您希望使用它访问Java中的结果集。

谢谢您的回复!我已经在我的数据库上尝试过了,这也是我正在寻找的,但是,当我试图检索2005年以外的其他年份时,我得到了一个SQL异常错误。我已经用您建议的查询和错误发生的位置更新了上面帖子中的代码。你介意指出我哪里出了问题吗?你的评论没有多大意义,我完全没有料到。简单地要求任何一年都不应该导致异常,相反,这可能只是意味着没有任何记录回来。你应该更新你的问题与你看到的完全一致。谢谢你回来。我已经更新了帖子。很抱歉,如果之前不清楚,您的查询在结果集中只有2列,因此rs.getString3或rs.getString4将抛出错误。考虑一下我在回答中所给出的查询。我已经实现了SQL查询。我如何从第二列和第三列检索数据?您没有,因为您只选择了两列。我很困惑。如果rs.getString1和rs.getString2检索2005年和数字,我如何检索2006年和2007年及其数字?我已经回答了您的问题。祝你好运