【问题标题】:Jfreechart and jdbc.CategoryDatasetJfreechart 和 jdbc.CategoryDataset
【发布时间】:2016-10-11 22:23:03
【问题描述】:

我的目标是编写一个小程序,该程序可以访问我们的公共安全数据库并检索救护车响应时间。然后我想获取该数据并生成直方图。 我很难让 JFreechart 打印救护车响应时间的直方图。当我运行我的代码时,Netbeans 会生成一条错误消息,说明:

线程“main”java.lang.ClassCastException 中的异常:org.jfree.data.jdbc.JDBCCategoryDataset 无法转换为 org.jfree.data.xy.IntervalXYDataset 在 EMSResearch.histogram1.main(histogram1.java:39) C:\Users\kulpandm\AppData\Local\NetBeans\Cache\8.1\executor-sn-ps\run.xml:53:Java 返回:1 构建失败(总时间:7 秒)

我完全不知道如何解决这个问题。如果我能打印出直方图,我就可以继续前进,让它看起来更适合我的报告。下面显示的是我的代码:

package EMSResearch;

import java.io.File;
import java.io.IOException;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.jdbc.JDBCCategoryDataset;
import org.jfree.data.xy.IntervalXYDataset;

public class histogram1
{

public static void main(String[] args) throws ClassNotFoundException
{

    try
    {
        Connection conn = null;
        conn = DriverManager.getConnection("jdbc:sqlserver://MyURL;database=MyDatabase;integratedsecurity=false;user=MyUser;password=MyPassword");
        //dataset = new JDBCCategoryDataset(conn);
        String query = "SELECT PUN_UnitID\n"
                + ", DATEDIFF(SECOND, IIU_tenroute, IIU_tArrive) AS [ResponseTime]\n"
                + "FROM IIncidentUnitSummary\n"
                + "WHERE IIU_tDispatch > 'may 15, 2016'\n"
                + "AND PUN_UnitID LIKE 'M[0-4]_'\n"
                + "AND IIU_tEnroute IS NOT NULL\n"
                + "AND IIU_tArrive IS NOT NULL\n"
                + "AND DATEDIFF(SECOND, IIU_tEnroute, IIU_tArrive) BETWEEN 0 AND 1800";
        JDBCCategoryDataset dataset = new JDBCCategoryDataset(conn, query);
        dataset.executeQuery(query);
        conn.close();
        //the following blows up.
        JFreeChart chart;
        chart = ChartFactory.createHistogram("data", "ws range", "freq", (IntervalXYDataset) dataset, PlotOrientation.VERTICAL, true, false, false);
        int width = 560;
        int height = 370;
        File histChart = new File("c:\\histChart2.jpeg");

        try
        {
            ChartUtilities.saveChartAsJPEG(histChart, chart, width, height);
        } catch (IOException ex)
        {
            Logger.getLogger(chart2.class.getName()).log(Level.SEVERE, null, ex);
        }
    } catch (SQLException ex)
    {
        ex.printStackTrace();
    }

}
}

你能告诉我我做错了什么吗? 我能做些什么来解决这个问题? (请具体说明,因为我不是专家级程序员)。

【问题讨论】:

    标签: jdbc jfreechart


    【解决方案1】:

    CategoryDataset不是IntervalXYDataset;他们为客户提供完全不同的东西。

    CategoryDataset可以用于创建条形图。使用您的JDBCCategoryDataset 调用ChartFactory.createBarChart() 至少应该让您有所了解。参考这个相关的example

    API 建议“编写您自己的代码以从 ResultSet 读取数据。”我会使用这些数据来填充HistogramDataset,看到here。因为HistogramDataset实现了IntervalXYDataset,所以适合和ChartFactory.createHistogram()一起使用。 example 的每个原色都有一个系列,看起来您可能想要每个 PUN_UnitID 一个系列。

    从概念上讲,在初始查询中满足LIKE 子句的SELECT DISTINCT PUN_UnitID 可能更容易。然后查询每个PUN_UnitIDresponse time 值并调用dataset.addSeries(PUN_UnitID, values, bins)

    或者,循环遍历ResultSet,将条目添加到Map<String, List<Integer>>,其中键是PUN_UnitID,值是response timesList。像以前一样使用Map 条目来构造HistogramDataset

    如果延迟成为问题,请使用SwingWorker 更新数据集,如here 所示。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      相关资源
      最近更新 更多