来自数据库的JFreeChart条形图数据集 [英] JFreeChart Bar Chart dataset from database
问题描述
我的目标是使用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屋!