来自数据库的JFreeChart条形图数据集 [英] JFreeChart Bar Chart dataset from database

查看:110
本文介绍了来自数据库的JFreeChart条形图数据集的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的目标是使用JFreeChart生成此条形图. /p>

我正在尝试使用MVC从数据库中获取JFreeChart数据; Bean,数据访问对象(DAO)和Servlet.我在Servlet编写代码时遇到问题.下面的代码是我到目前为止所拥有的.

我们将不胜感激,在此先感谢您! :)

数据库

id |收入


R1 | 999
M3 | 832
G7 | 318

Bean

public class Revenue
{
   private String id;
   private Integer revenue;

   //getters and setters
}

DAO

public ArrayList<Revenue> getAllRevenueList()
{
  try
  {
      //driver 
      //connection code 

     String sql = "SELECT id,revenue FROM revenue_table";
     Statement stmt = con.createStatemtnt();
     ResultSet rs = stmt.executeQuery(sql);

     ArrayList<Revenue> revenueList = new ArrayList<Revenue>();
     while(rs.next)
     {
        Revenue r = new Revenue();
        r.setId(rs.getString("id"));
        r.setRevenue(Integer.parseInt(rs.getString("revenue")));
        revenueList.add(r);  //add object to list
     }

     return revenueList;
  }
  catch(Exception e)
  {
     e.printStackTrace();
     return null;
  }
}

Servlet

protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("image/png");

        OutputStream outputStream = response.getOutputStream();
JFreeChart chart = getRevenueChart();

int width = 1100;
            int height = 350;
            ChartUtilities.writeChartAsPNG(outputStream, chart, width, height);


}

public JFreeChart getRevenueChart() {

//Cannot instantiate the type CategoryDataset

        CategoryDataset dataset = new CategoryDataset();

        ArrayList<Bean> revenueList = DAO.getAllRevenueList();

        if (revenueList != null && !revenueList.isEmpty()) {
            for (Bean r : revenueList) {
                dataset.setValue(r.getRevenue(), r.getID());

            }
        }

        JFreeChart chart = ChartFactory.createBarChart3D("Graph Title", 
                "ID", 
                "Revenue",
                dataset, 
                PlotOrientation.VERTICAL, 
                false,
                false,
                false);

        CategoryPlot plot = chart.getCategoryPlot();
        CategoryAxis axis = plot.getDomainAxis();

        CategoryItemRenderer renderer = plot.getRenderer();
        BarRenderer r = (BarRenderer) renderer;
        r.setMaximumBarWidth(0.95);

        return chart;
    }

解决方案

如果您的问题是根据给定的List<Revenue>创建图表,请尝试执行以下操作.

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (Revenue revenue : revenueList) {
  // the middle parameter is for naming the value, can be empty if you have just one
  dataset.addValue(revenue.getRevenue(), "", revenue.getId());
}

JFreeChart chart = ChartFactory.createBarChart(
  "",
  "",
  "Revenues",
  dataset,
  PlotOrientation.VERTICAL,
  true,
  false,
  false
);                // or whatever parameters you need

有关静态工厂方法的信息为this Bar Chart using JFreeChart.

I am trying to obtain JFreeChart data from database using MVC; Bean, Data Access Object (DAO) and Servlet. I have problem in doing code at Servlet. Below codes are what I have so far.

Help will be appeciate and thank you in advance! :)

Database

id | revenue


R1 | 999
M3 | 832
G7 | 318

Bean

public class Revenue
{
   private String id;
   private Integer revenue;

   //getters and setters
}

DAO

public ArrayList<Revenue> getAllRevenueList()
{
  try
  {
      //driver 
      //connection code 

     String sql = "SELECT id,revenue FROM revenue_table";
     Statement stmt = con.createStatemtnt();
     ResultSet rs = stmt.executeQuery(sql);

     ArrayList<Revenue> revenueList = new ArrayList<Revenue>();
     while(rs.next)
     {
        Revenue r = new Revenue();
        r.setId(rs.getString("id"));
        r.setRevenue(Integer.parseInt(rs.getString("revenue")));
        revenueList.add(r);  //add object to list
     }

     return revenueList;
  }
  catch(Exception e)
  {
     e.printStackTrace();
     return null;
  }
}

Servlet

protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("image/png");

        OutputStream outputStream = response.getOutputStream();
JFreeChart chart = getRevenueChart();

int width = 1100;
            int height = 350;
            ChartUtilities.writeChartAsPNG(outputStream, chart, width, height);


}

public JFreeChart getRevenueChart() {

//Cannot instantiate the type CategoryDataset

        CategoryDataset dataset = new CategoryDataset();

        ArrayList<Bean> revenueList = DAO.getAllRevenueList();

        if (revenueList != null && !revenueList.isEmpty()) {
            for (Bean r : revenueList) {
                dataset.setValue(r.getRevenue(), r.getID());

            }
        }

        JFreeChart chart = ChartFactory.createBarChart3D("Graph Title", 
                "ID", 
                "Revenue",
                dataset, 
                PlotOrientation.VERTICAL, 
                false,
                false,
                false);

        CategoryPlot plot = chart.getCategoryPlot();
        CategoryAxis axis = plot.getDomainAxis();

        CategoryItemRenderer renderer = plot.getRenderer();
        BarRenderer r = (BarRenderer) renderer;
        r.setMaximumBarWidth(0.95);

        return chart;
    }

解决方案

If your problem was to create the chart from given List<Revenue> then try something like the following.

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (Revenue revenue : revenueList) {
  // the middle parameter is for naming the value, can be empty if you have just one
  dataset.addValue(revenue.getRevenue(), "", revenue.getId());
}

JFreeChart chart = ChartFactory.createBarChart(
  "",
  "",
  "Revenues",
  dataset,
  PlotOrientation.VERTICAL,
  true,
  false,
  false
);                // or whatever parameters you need

Info about the static factory method is here.

这篇关于来自数据库的JFreeChart条形图数据集的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆