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