永发信息网

java如何将数据库中的数据统计后用jfreechart显示出来(要具体代码)

答案:1  悬赏:60  手机版
解决时间 2021-01-26 01:26
  • 提问者网友:缘字诀
  • 2021-01-25 16:49
java如何将数据库中的数据统计后用jfreechart显示出来(要具体代码)
最佳答案
  • 五星知识达人网友:过活
  • 2021-01-25 17:10
其实挺简单的,注意我写的注释!
<%@ page contentType="text/html;charset=GB2312" %>
<%@ page import="org.jfree.chart.JFreeChart,org.jfree.chart.ChartUtilities,
org.jfree.chart.ChartFactory,
org.jfree.chart.plot.PlotOrientation,
org.jfree.data.category.DefaultCategoryDataset"%> //上面是需要添加的头文件


<%
String dataName[]=new String[]{"0-30岁","30-50岁","50-70岁","70岁以上"};//显示数据系列
int dataValueCount[]={4,5,4,6};//数据系列对应的值
//以上两行可以从数据库里去取值,用循环写入数组
//------创建数据集,并设置值------
DefaultCategoryDataset categoryDataset = newDefaultCategoryDataset();//这个表示柱状图
for(int i=0;i categoryDataset.addValue(dataValueCount[i],dataName[i],dataName[i]);//循环写入数据集
String titleString="用户年龄阶段分布统计图";//图的标题
JFreeChart chart = ChartFactory.createBarChart(titleString,"用户年龄阶段","数量",
categoryDataset,PlotOrientation.VERTICAL,true,true,false);//chart就是欲创建的图表
ChartUtilities.writeChartAsJPEG(response.getOutputStream(),chart,500,300);//这行的意思是输出成一个JPEG形式的文件显示
%>



其实后面还有很多参数的,比如颜色,柱子的标题等等,太多属性了,这个你查看一下JFREECHART的文档就行了,比如下面这样,很容易吧。
Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);

// chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
chart.setTextAntiAlias(false);
chart.setBackgroundPaint(Color.white);
// create plot
CategoryPlot plot = chart.getCategoryPlot();
// 设置横虚线可见
plot.setRangeGridlinesVisible(true);
// 虚线色彩
plot.setRangeGridlinePaint(Color.gray);

// 数据轴精度
NumberAxis vn = (NumberAxis) plot.getRangeAxis();
// vn.setAutoRangeIncludesZero(true);
DecimalFormat df = new DecimalFormat("#0.00");
vn.setNumberFormatOverride(df); // 数据轴数据标签的显示格式
// x轴设置
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(labelFont);// 轴标题
domainAxis.setTickLabelFont(labelFont);// 轴数值

属性比较多,不可能全贴出来,也不必全用,设置一些实用的属性即可。追问用的不是JSP,请问要怎么处理,主要是如何处理数据(要是可以改变的那种数据)。

//以上两行可以从数据库里去取值,用循环写入数组
你的这句话能不能具体点呀,最好有具体的代码,呵呵追答首先,非JSP的当然可以,头文件改成import xxxx,里面的HTML标签去掉就行了,至于数据库取值很容易啊,本来是填值的,现在直接从数据库里循环读出就行了。
String sql= "select * from cpdls "; //sql语句
rs=DBconnect.executeQuery(sql); //连接
TimeSeries timeseries = new TimeSeries( "最大值 ",Day.class);
TimeSeries timeseries1 = new TimeSeries( "平均值 ",Day.class);
//从数据库中取值,数据和时间
try{
while(rs.next()) //遍历
{
String y0=rs.getString( "MAX ");
String y1=rs.getString( "MEAN ");
Float f0=Float.parseFloat(y0);
Float f1=Float.parseFloat(y1);
String s=rs.getString( "DATETIME "); //把各种值取出来并转换类型

//从yyyyMMddHHmm时间格式的char中取出年月日设为int值
int x=Integer.parseInt(s.substring(0,4));
int y=Integer.parseInt(s.substring(5,7));
int z=Integer.parseInt(s.substring(8,10));
timeseries.add(new Day(z,y,x),f0);
timeseries1.add(new Day(z,y,x),f1);

}
}
catch(Exception e){System.out.print( "error ");}
---------------以下是关键,写在JFREECHART创建图表中-------------
TimeSeriesCollection dataset = new TimeSeriesCollection();//新建数据集
dataset.addSeries(timeseries); //把前面从数据库里取出的内容放到数据集中
dataset.addSeries(timeseries1); //同上

实际上这样就可以了,要改颜色、字体什么的按照文档里的就行。追问能不能给个详细点的例子啊?最好是完整的代码。。。
能不能给个QQ加下,方便问问题,哇哈哈
非常谢谢追答QQ就不加了,不太方便,我把我以前做过的一个东西代码直接贴上来,你看看吧,如果这还不会我也没办法了= =
admindao dao = new admindao();//这是一个操作类,用于从数据库取数据,具体我写最后
String strHall = "0";
int l1 = 30 - dao.inquireDao(strHall, 0, 30).size();//计算,不用管它
int l2 = 20 - dao.inquireRoomDao(strHall, 0, 20).size();//计算,不用管它

DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(l1, "", "大厅");//直接把数据集放进去
dataset.addValue(l2, "", "包间");//直接把数据集放进去

JFreeChart chart = ChartFactory.createBarChart3D("饭店预定情况图", "类型",
"已预定", dataset, PlotOrientation.VERTICAL, false, false,
false);
Font font = new Font("SimSun", 10, 20);
TextTitle txtTitle = null;
txtTitle = chart.getTitle();
txtTitle.setFont(font);

.......各种属性随意改就可以了,后面和我前面发的一样。

admindao的代码也给你
public List inquireDao(String a,int first,int n) {
Session s = HibernateSessionFactory.getSession();
// String hql = "from Books as b where b.name like ?";
Query q = s.createQuery("from Hall as h where h.yes like ?");
q.setString(0,a) ;
q.setFirstResult(first);
q.setMaxResults(n);
return q.list();
}

其实网上例子很多,随便找个自己做一下,立马就会了,没什么难度的。
public List inquireRoomDao(String a,int first,int n) {
Session s = HibernateSessionFactory.getSession();
// String hql = "from Books as b where b.name like ?";
Query q = s.createQuery("from Room as r where r.yes like ?");
q.setString(0, a) ;
q.setFirstResult(first);
q.setMaxResults(n);
return q.list();
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯