使用数据访问对象和 Servlet 获取 JFreeChart 数据

Posted

技术标签:

【中文标题】使用数据访问对象和 Servlet 获取 JFreeChart 数据【英文标题】:Obtain JFreeChart data using Data Access Object & Servlet 【发布时间】:2014-02-18 02:04:01 【问题描述】:

我的目标是使用 Java 生成 条形图,所以我搜索了一个可以做到这一点的库。很快我找到了JFreeChart库并从这里下载。

给出的教程是数据是硬编码的。所以作为我的例子。但是,我正在尝试使用 数据访问对象 (DAO) 和 Servlet 从数据库中获取 JFreeChart 数据。

This example 显示如何从数据库中获取 JFreeChart 数据。但它不使用 DAO。

有没有人可以帮助我如何使用 DAO 和 SERVLET 获取 JFreeChart 数据?

在 DAO 中,我应该创建一个返回数组列表、整数、布尔值的方法吗?

我希望我的图表看起来像这样。

我的数据库

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

我的小服务程序

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;

【问题讨论】:

对数据库使用 JDBC 还是休眠? @Aniket JDBC。我的 SQL。我应该在 DAO 中创建什么方法? 【参考方案1】:

为了在servlet中进行简单的访问,创建一个类并将实例变量声明为数据库表有

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;
  

小服务程序

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());    
     
  

  ..........
  ............
  ..............

【讨论】:

嗨!你的回答就像一个魅力!我明白你的解释..非常感谢..! :) 您好!现在我要做this type bar chart。它与上面的条形图不同。 servlet 中的方法也不同。你能在servlet中帮助我吗?我应该为此创建一个新问题吗?提前致谢! @newbieinjavaversion2 :是的,发布新问题。告诉我问题链接。 嗨,this is the link希望你能帮助我,我是全新的。谢谢! :) @newbieinjavaversion2 :我无法理解您的问题。这很简单。没关系。如果您有任何其他疑问,请告诉我。

以上是关于使用数据访问对象和 Servlet 获取 JFreeChart 数据的主要内容,如果未能解决你的问题,请参考以下文章

jsp内置对象pageContext如何在Servlet中获取值

Servlet - Session相关

Struts2访问servlet的三种方式

servlet无法调用数据库?

servlet

Javaweb-Servlet总结(概述接口使用配置获取请求方式路径操作Request对象Response对象)