<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import = "org.jfree.data.general.DefaultPieDataset"%> 
<%@ page import = "org.jfree.chart.*"%> 
<%@ page import = "org.jfree.chart.plot.*"%> 
<%@ page import = "org.jfree.chart.servlet.ServletUtilities"%> 
<%@ page import = "org.jfree.chart.labels.StandardPieToolTipGenerator"%> 
<%@ page import = "org.jfree.chart.urls.StandardPieURLGenerator"%> 
<%@ page import = "org.jfree.chart.entity.StandardEntityCollection"%> 
<%@ page import = "org.jfree.data.category.DefaultCategoryDataset"%>
<%@ page import = "java.io.*"%> 
<%@ page import = "java.awt.Color"%>
<%@ page import = "org.jfree.chart.renderer.category.BarRenderer3D"%> 
<%@ page import = "org.jfree.chart.axis.CategoryAxis"%>
<%@ page import = "org.jfree.chart.labels.StandardCategoryItemLabelGenerator"%>
<%
//String time=request.getParameter("time");//得到年份
//String year[]=new String[12];//存储月份的数组。
//int sum[]=new int[12];//每月发帖数
int age[]=new int[1000];//年龄信息
String ages[]=new String[]{"21-30","31-40","41-50","20岁以下或51以上"};//年龄范围
int sum[]=new int[4];
//连接数据库
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
      Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl?user=ms&password=ms&characterEncoding=UFT-8");
     Statement ps=con.createStatement();//数据库
//for(int i=0;i<year.length;i++){
//year[i]=(i+1)+"月";//数组内存为:1月,2月...
//String sql="select count(*) from jbbs where posttime between '"+time+"-"+(i+1)+"-1' and '"+time+"-"+(i+1)+"-31'";//sql查询count数
//ResultSet rs=ps.executeQuery(sql);//结果集
//rs.next();
//int o=rs.getInt(1);
//sum[i]=o;//放在数组中
//}
for(int i=0;i<ages.length;i++){
if(i!=ages.length){
String sql="select count(*) from D_EMP_EMOLOYEE where EMP_AGE between '"+21+"+"+(i*10)+"' and '"+30+"+"+(i*10)+"'";
ResultSet rs=ps.executeQuery(sql);
rs.next();
int o=rs.getInt(1);
sum[i]=o;
System.out.println(sum[i]);
}else{
String sql="select count(*) from D_EMP_EMOLOYEE where EMP_AGE not between '21' and '51'";
ResultSet rs=ps.executeQuery(sql);
rs.next();
int o=rs.getInt(1);
sum[i]=o;
}
}
}catch (Exception e2) {
     out.print(e2.toString()); 
    }
%>//在表格中输出
<table align="center" class="zw12" width="80%" border="0" width="200" cellspacing="1" cellpadding="0" >
<tr bgcolor="#0099FF" align="center">   <td>1月</td><td>2月</td><td>3月</td><td>4月</td>
   <tr bgcolor="#CCCCCC" align="center">
   <%
for(int j=0;j<sum.length;j++){
out.print("<td>"+sum[j]+"</td>");
}
%>
</tr></table>//在表格中输出
<!--//jfreechart-->
<%
DefaultCategoryDataset dataset =new DefaultCategoryDataset();//建立数据集for(int k=0;k<4;k++){
dataset.addValue(sum[k],ages[k],"年龄" );
}
//修改文字说明即可
JFreeChart chart = ChartFactory.createBarChart3D( "员工年龄分布" , "员工全部年龄数量统计" , "年龄值 " ,dataset,PlotOrientation.VERTICAL, true , false , false );
        chart.setBackgroundPaint(Color.WHITE);
        CategoryPlot plot = chart.getCategoryPlot();
        CategoryAxis domainAxis = plot.getDomainAxis();
         // domainAxis.setVerticalCategoryLabels( false );
        plot.setDomainAxis(domainAxis);
        BarRenderer3D renderer =   new BarRenderer3D();
        renderer.setBaseOutlinePaint(Color.BLACK);
         // 设置每个地区所包含的平行柱的之间距离
        renderer.setItemMargin(0.1);
         // 显示每个柱的数值,并修改该数值的字体属性
        renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
        renderer.setItemLabelsVisible(true);
        plot.setRenderer(renderer);
         // 设置柱的透明度
        plot.setForegroundAlpha(0.8f);
StandardEntityCollection sec =   new StandardEntityCollection(); 
            ChartRenderingInfo info =   new ChartRenderingInfo(sec); 
PrintWriter w =   new PrintWriter(out); // 输出MAP信息 
String filename = ServletUtilities.saveChartAsJPEG(chart, 500 , 300 ,info,session);
ChartUtilities.writeImageMap(w, " map0 " ,info, false ); 
String graphURL =request.getContextPath()+"/servlet/DisplayChart?filename="+filename;
%><P ALIGN ="CENTER"> 
<img src="<%=graphURL%>" width =500 height =300 border =0 usemap ="#map0"> 
</P> 异常指针Oraclejava柱形图

解决方案 »

  1.   

            for(int i=0;i<ages.length;i++){
                if(i!=ages.length){
                    String sql="select count(*) from D_EMP_EMOLOYEE where EMP_AGE between '"+21+"+"+(i*10)+"' and '"+30+"+"+(i*10)+"'";
                    ResultSet rs=ps.executeQuery(sql);
                    rs.next();
                    int o=rs.getInt(1);
                    sum[i]=o;
                    System.out.println(sum[i]);
                }else{
                    String sql="select count(*) from D_EMP_EMOLOYEE where EMP_AGE not between '21' and '51'";
                    ResultSet rs=ps.executeQuery(sql);
                    rs.next();
                    int o=rs.getInt(1);
                    sum[i]=o;
                }
            }这段代码有点问题, 应该改成如下:
            for(int i=0;i<ages.length;i++){
                if(i!=(ages.length-1)){
                    String sql="select count(*) from D_EMP_EMOLOYEE where EMP_AGE not between '21' and '51'";
                    ResultSet rs=ps.executeQuery(sql);
                    rs.next();
                    int o=rs.getInt(1);
                    sum[i]=o;
                 }else{
                    String sql="select count(*) from D_EMP_EMOLOYEE where EMP_AGE between '"+21+"+"+(i*10)+"' and '"+30+"+"+(i*10)+"'";
                    ResultSet rs=ps.executeQuery(sql);
                    rs.next();
                    int o=rs.getInt(1);
                    sum[i]=o;
                    System.out.println(sum[i]);
                }
            }
      

  2.   


    这是SQL异常, SQL语句有问题吧, debug下, 查找下是哪一行