动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.java 实现pop3 server.
.关于手机游戏中的炮弹轨迹—抛物.
.性能优化:==代替equals.
.如何提高软件的可测试性.
.J2ME应用基础.
.struts源代码阅读(Commons-Poo.
.java中的对象引用问题的再次理解.
.用JavaBean数据组件集成JSF应用程.
.Java Bean实现航空预定机票功能应.
.fontcolor 方法.
.Java GUI误解 因为外观而拒绝Swi.
.认识了解“J2ME”.
.Servlet容器工作原理.
.maven的安装和使用.
.Servlet与Javabean配置.
.如何在java中去掉文本文件中的“.
.Java语言深入 JAVA之精髓IO流.
.简易计算器.
.安装配置篇Apache+Tomcat.
.Java高手谈论Hibernate的发展之路.

用Java在Web页面上输出统计图

发表日期:2008-1-5 |



河南省焦作水利局 聂春生

  在Internet 和Intranet 的应用中,数据库和Web 技术的结合是传统MIS 系统移植到Internet(Intrant) 环境的要害, 已有不少厂商推出了各自的产品,但这些产品基本上是实现数据的Html 格式输出。在实际应用中,我们经常需要把数据以统计图的形式表现出来,例如股票行情曲线图的输出。传统的方法是把统计图作为一个图形文件放到Web 服务器的目录中。这种做法虽然简单,但有明显的局限性:一是图形文件要占用较大存储空间;二是难以适应灵活复杂的查询要求;三是图形文件随数据库的变化而更新,加重了服务器的负担,也轻易造成图形和数据库的不一致。
  显然,要实现上述要求,需要两个要害环节:一是从数据库中读出数据;二是根据读出的数据在Web 页面中绘图。我们采用JDBC 访问数据库,在Web 页面中绘图则使用Java.awt 包中提供的Graphics 类实现。
  为便于表述,建立数据表如下:

项 目
指 标

水 产 养 殖
60

工 程 管 理
89

抗 旱 防 汛
100

财 务
200

办 公 室
350

勘 测 设 计
80

  我们的目标就是把上表用统计图表现出来(本文用水平柱状图)。本文中所指数据库均为如上形式的表,其字段1 为字符形字段,表示项目信息;字段2 为数值形字段(用浮点形读出),表示指标数。实际应用中,对程序稍作修改,就可使其更加灵活通用。
  为了绘制各种形式的图表,先定义一个Graph 抽象类(注重不是Graphics):
import java.sql. *;
import java.awt. *;
abstract class Graph{
 int height,width; // 绘图区域的高和宽
 int maxRow=50,row=0;
 // 可容纳的最大记录数和实有记录数
 Color color=new Color(50,50,200); // 默认绘图颜色
 float scale;      // 比例尺
 String[] name;   // 项目名缓冲区
 float[] value;    // 指标值缓冲区
 public Graph(Dimension d,int maxRows,Color fColor){
   height=d.height;
   width=d.width;
   name=new String[maxRows];
   value=new float[maxRows];
   color=fColor;
 }
 public void setResult(ResultSet result)
{ // 把查询结果读入缓冲区
  try{
row=0;
   while(result.next() &&row<maxRow){
name[row]=result.getString(1);
value[row]=result.getFloat(2);
row + +;
}
}
catch(Exception ex){
System.out.println(“\n failure!" +ex.getMessage()); }
}

// 绘制统计图的抽象方法, 在子类中实现
}

  在这个类中,定义了图表的一般特性,如颜色、比例尺、记录缓冲区等,并实现了把查询结果置入缓冲区的setResult 方法。因为各种图表的绘制方法完全不同,故把draw 方法定义为抽象方法,有待其子类实现。
  限于篇幅,本文仅介绍实现绘制水平柱状图的子类GraPHPost, 其主要功能是实现draw 方法。其他子类与其类似。
import java.sql.*;
import java.awt.*;
public class GraphPost extends Graph{
  float interval=0;
 //柱间空白在柱宽度(含柱间空白)
 中所占比例,0<interval0) interval=ival;
  }
  void draw(Graphics g){
FontMetrics fontMetrics=g.getFontMetrics();
try{
  Color bgColor=new Color(255,255,255);
  g.setColor(bgColor); 
  g.fillRect(0,0,width,height); //填充背景色
  g.setColor(color);
  int maxLen=0;
  float maxValue=0;
  for (int i=0;imaxLen)
  maxLen=fontMetrics.stringWidth(name[i]);
     if (value[i]>maxValue)
   maxValue=value[i];
   }
   xMargin=maxLen+10;//
   yMargin=fontMetrics.getHeight()+10;
   int cHeight=fontMetrics.getHeight();
   int step=getStep(maxValue);
   //计算x坐标刻度单位
   scale=(width-xMargin)/maxValue;
   eHight=(height-yMargin)/row;
   g.drawRect(xMargin-1,0,width-xMargin,height
   -yMargin); //绘出图形外框
   for(int i=1;i*step10){
  mo=mo*10;
  st=(int)(value/10)/mo;
 }
 return (st+1)*mo;
}
}

  对数据库的查询在applet 主类中用creatResultSet 方法实现:
private static ResultSet creatResultSet
(String dStr,String sqlStr)
/ * 根据给定的数据源和
sql 查询语句读取数据库*/ {......}

  在applet 主类的paint() 方法中,调用类GraphPost 的draw 方法,即可实现统计图的输出。为把查询结果保存在GraphPost 的数据缓冲区中供paint() 方法多次使用,需要把一个GraphPost 对象定义为applet 主类的成员。在applet 主类的init() 方法中,对GraphPost 对象初始化,并完成JDBC 驱动程序注册。在applet 主类的start() 方法中,连接数据库,执行查询,并把查询结果存放到GraphPost 对象的数据缓冲区中。这样, 在每次回到包含该applet 的页面时, 都要重新查询数据库, 保证用户阅读到数据库的最新信息。
  下面是applet 主类代码:
import java.applet.Applet;
import java.sql. *;
import java.awt. *;
public class WebGraph extends Applet {
  GraphPost graphPost;
public void init() {
   try{
     Color color=new Color(20,20,230);
     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
// 注册驱动程序
graphPost=new GraphPost(size(),30,color,0.3f);
// 初始化graphPost 对象
    }
  catch(Exception e){
  System.out.println("\n" +“init error" +e.getMessage());
 }
 }
 public void start(){
  try{
  ResultSet rs;
  String dSourName="FoXPro Files";
  String sqlStr="SELECT *FROM TEST";
  rs=creatResultSet(dSourName,sqlStr);
  // 从数据库中提取数据
  graphPost.setResult(rs);
  // 把查询结果发送给graphPost
  rs.close();
}
catch(Exception e){
  System.out.println("\n" +“start error"
  +e.getMessage());
   }
}
public void paint(Graphics g){
 graphPost.draw(g);
  // 调用graphPost 的draw 方法绘制柱状统计图
}
private static ResultSet creatResultSet(String dStr,String sqlStr)
  throws SQLException{
  / *根据给定的数据源和sql
   查询语句读取数据库*/
   String datasr=dStr;
   Connection con1=DriverManager.getConnection
("jdbc:odbc:" +datasr); // 连接数据库
   Statement stmt1=con1.createStatement();
   return stmt1.executeQuery(sqlStr);// 执行查询
  }
}

  为了正确使用JDBC,需要安装JDBC 类库(已包含在JDK1.1 中)和JDBC 驱动程序。这方面资料很多,笔者不再赘述。本文为使用ODBC 操作FoxPro 数据库,采用了JDBC -ODBC 桥接方式。在网络环境下,建议使用专门的JDBC 驱动程序。
  本程序在Java WorkShop 2.0 中调试通过


上一篇:使用WebRowSet完成JDBC的大部分任务 人气:831
下一篇:用Java压缩文件或目录下的所有文件 人气:1298
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-13 爬爬思特新闻管理系统 v2.0 Beta1
2008-10-13 Pligg v9.9.5 Beta
2008-10-13 广优邮件发送系统 v2.1
2008-10-13 缤纷互动视频交友 v3.1 RC
2008-10-13 MyShop网络商城 build 081005
2008-10-13 Chyrp 超轻量级开源博客引擎 v2.
2008-10-13 162100静态(论坛/文章)系统 v2.4
2008-10-13 金博人才招聘求职网黄金版 v4.2
2008-10-13 愚人笔记 v4.0
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号