我的目标是使用java生成条形图,所以我搜索了一个可以完成此任务的库。很快我找到了JFreeChart库并从这里下载了它。
给出的教程是数据硬编码。以我为例。但是,我试图使用数据访问对象(dao)和servlet从数据库中获取jfreechart数据。
This example演示如何从数据库获取jfreechart数据。但它不使用刀。
有没有人可以帮助我如何使用dao和servlet获取jfreechart数据?
在dao中,我应该创建一个返回arraylist、整数和布尔值的方法吗?
我希望我的图表是这样的。
我的数据库

id | revenue | year
_______________________
R1 | 999     | 2012
R1 | 832     | 2013
R2 | 318     | 2012
R2 | 111     | 2013
R3 | 342     | 2012
R3 | 873     | 2013

我的servlet
public JFreeChart getChart() {


    DefaultCategoryDataset dataset = new DefaultCategoryDataset();

    dataset.setValue(999, "2012", "R1");
    dataset.setValue(832, "2013", "R1");
    dataset.setValue(318, "2012", "R2");
    dataset.setValue(111, "2013", "R2");
    dataset.setValue(342, "2012", "R3");
    dataset.setValue(873, "2013", "R3");

    JFreeChart chart = ChartFactory.createBarChart3D("",
            "Years", // domain axis label
            "Revenue", // range axis label
            dataset, // data
            PlotOrientation.VERTICAL, // orientation
            true, // include legend
            true, // tooltips
            false);

    CategoryPlot plot = chart.getCategoryPlot();
    CategoryAxis axis = plot.getDomainAxis();
    axis.setCategoryLabelPositions(CategoryLabelPositions
            .createUpRotationLabelPositions(Math.PI / 8.0));

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

    return chart;
}

最佳答案

要在servlet中进行简单访问,请创建一个类并将实例变量声明为database table has

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

   //getters and setters
}

现在,从数据库中获取数据,在dao内部创建一个方法并编写
public ArrayList<Revenue> getAllRevenueList()
{
  try
  {
       // try-catch exception, if any exception occurs return null
      //driver
      //connection code

     String sql = "SELECT id,revenue,year FROM revenue_table ORDER BY year";
     Statement stmt = con.createStatemtnt();
     ResultSet rs = stmt.executeQuery(sql);
     //now iterate over the result set and create list of objects of class `Revenue`

     //create an ArrayList<Revenue>
     ArrayList<Revenue> revenueList = new ArrayList<Revenue>();
     while(rs.next)
     {
        //for each row in result set create the object of class Revenue
        Revenue r = new Revenue();
        r.setId(rs.getString("id"));
        r.setRevenue(Integer.parseInt(rs.getString("revenue")));
        r.setYear(rs.getString("year"));
        revenueList.add(r);  //add object to list
     }

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

servlet
public JFreeChart getChart()
{
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();

  //retrieve the revenue ArrayList
  //make sure that you have initialized the revenueDao object before calling method
  ArrayList<Revenue> revenueList = revenueDao.getAllRevenueList();
  //check list is not null and empty
  if(revenueList != null && !revenueList.isEmpty())
  {
     for(Revenue r : revenueList)
     {
        dataset.setValue(r.getRevenue(), r.getYear, r.getId());
     }
  }

  ..........
  ............
  ..............
}

关于database - 使用数据访问对象和Servlet获取JFreeChart数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21377379/

10-13 07:31
查看更多