【问题标题】:Retrieving from database to display as line graph从数据库中检索以显示为折线图
【发布时间】:2021-04-20 07:00:25
【问题描述】:

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

当前代码sn-p:

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 错误:

在 DB 中执行查询返回:

我可以使用 rs.getString(1) 检索 2005 年,它是使用 rs.getString(2) 的相应数字,但是当我尝试检索 2006 年时,它是通过 rs.getString(3) 和 rs.getString( 4) 我得到一个 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

【问题讨论】:

  • 您的查询在结果集中只有 2 列,因此 rs.getString(3)rs.getString(4) 将引发错误。考虑使用我在下面的回答中给出的查询。
  • 我已经实现了你的 SQL 查询。如何从第二列和第三列检索数据?
  • 您没有,因为您只选择了 两个 列。
  • 我很困惑。如果 rs.getString(1) 和 rs.getString(2) 检索到 2005 年和编号,我如何检索 2006 年和 2007 年及其编号?
  • 我已经回答了你的问题。祝你好运!

标签: java mysql jdbc jfreechart


【解决方案1】:

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

SELECT Year, SUM(all_motor_vehicles) AS all_sales
FROM Vehicle
WHERE Year IN (2005, 2006, 2007)  -- or whatever years you want in your report
GROUP BY Year;

我不会费心为您提供上述查询的样板 JDBC 代码,因为您似乎已经掌握了这些基础知识。请注意,我为 SUM() 提供了一个别名,以防您想使用它访问 Java 中的结果集。

【讨论】:

  • 感谢您的回复!我已经在我的数据库上尝试过这个,这就是我正在寻找的东西,但是,当尝试检索 2005 年以外的其他年份时,我收到一个 SQL 异常错误。我已经使用您建议的查询以及发生错误的位置更新了上面帖子中的代码。你介意指出我哪里出错了吗?
  • 您的评论没有多大意义,对我来说完全出乎意料。简单地询问 任何年份都不会导致异常,而可能只是意味着不取回任何记录。您应该使用您所看到的确切内容更新您的问题。
  • 感谢您回来。我已经更新了帖子。抱歉,如果之前不清楚
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-07
  • 1970-01-01
  • 2017-07-31
相关资源
最近更新 更多