Question

My goal is to generate Bar Chart using Java so I searched for a library which could do it. Soon I found JFreeChart library and downloaded it from here.

The tutorial given is data is hardcode. So as my example. However, I am trying to obtain JFreeChart data from database using Data Access Object (DAO) and Servlet.

This example show how to obtain JFreeChart data from database. But it does not use DAO.

Is there anyone that can help me how to obtain JFreeChart data using DAO and SERVLET?

In DAO, should I create a method that return arraylist, a integer, a boolean?

I would like my graph to look like this. Bar Graph

My database

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

My 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;
}
Was it helpful?

Solution

To make simple access in servlet, create one class and declare the instance variable as database table has

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

   //getters and setters
}

Now, fetch the data from database, inside DAO create one method and write

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

  ..........
  ............
  ..............
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top