X-Spirit的陋室铭

生活有的时候面临许多选择,这些选择让人困惑。 生活有的时候没有任何选择,这个时候让人压抑。 但无论生活有没有给你选择,你只能做一件事情: 排除困难,勇往直前!

2007年5月31日星期四

Free Test心得

通常我们所做的FFT和Menu Tree大多只是看看UI和手机的表现,很难覆盖到日常使用可能碰到的千奇百怪的问题。
 
在做Free Test的时候,由于没有Case的限制,所以可以自由发挥。个人认为可以从以下几个方面下手:
 
1.测试这个功能的实际使用效果和性能。
 
2.测试这个功能在用户非正常操作时候的异常情况。
 
3.如果所测试的功能涉及到在统一的标准下和其他手机交互,应该注意测试兼容性。比如蓝牙、多媒体短信等等。
 
这一周就快结束了。虽然FFT做的不好,但是Free Test还是找到了不少error。以后再慢慢总结体会吧。
 
毕业设计搞得太累了。。。编码还没有真正开始。。。愁啊。

--
X-Spirit

2007年5月29日星期二

很久不来

很久没有来了。这周,第一次感到孤独。在北京就剩下自己了。最要命的是,每天工作8小时,上下班挤公交4小时,回宿舍做毕设6小时。

难 啊

2007年5月8日星期二

毕业设计初步

需求:

Login Logout

after Login:

1.Read the favourite RSS Feeds.

2.Add new Feeds to the Favourites.

3.delete feeds from the favourites.

4.classify the feeds in favourites.

5.mark the rank of feeds in favourites.

6.set the reading authority of the Feeds.(Shared,VIP,non-Shared)

before login:

1.Read the shared Rss feeds accroding to the class and the rank. Reading can be departed as two features: reading by class and reading by rank.

2.mark the rank rss feeds for the shared feeds.

Admin :

1.check the new incoming feeds.(delete and edit)

2.set authority for the user.(forbid a user or set as admin or VIP)

2007年5月5日星期六

从歌谣感受华夏历史

中国历史朝代歌

五帝黄颛喾尧舜

三代夏商西东周

春秋战国秦一统

西汉三国二晋收

宋齐梁陈南朝号

北魏二分又齐周

隋唐五代十国宋

辽夏金元俱寇仇

明清民国封建毕

如今仍旧不自由

中国历史朝代歌 2

夏商与西周,东周分两段

春秋和战国,一统秦两汉

三分魏蜀吴,二晋前后延

南北朝并立,隋唐五代传

宋元明清后,皇朝至此完 

中国历史朝代歌3


      
   唐尧虞舜夏商周,春秋战国乱悠悠。

   秦汉三国晋统一,南朝北朝是对头。

   隋唐五代又十国,宋元明清帝王休。

附:中国历史朝代简表

朝代 起止年代 创建人 都 城 

黄帝尧舜禹 约170万-4000年前 黄帝尧|舜 / 
夏朝 前2100-1600 启 阳城 
商朝 前1600-1100 汤 亳→殷 
西周 前1100-771 武王 镐 
东周 前770-256 周平王 洛邑 
春秋 前770-476 / 洛邑 
战国 前475-221 / /
 
秦朝 前221-206 秦始皇 咸阳 
西汉 前202-公元8年 汉高祖 长安 
新朝 8-23 王莽 长安 
东汉 25-220 光武帝 洛阳 

三国
魏 220-265 曹操 洛阳 
蜀 221-263 刘备 成都 
吴 229-280 孙权 建业 
西晋 265-316 司马炎 洛阳 
东晋 317-420 司马睿 建康 
十六国 304-439 / /
 
南北朝 420-581 / / 
隋朝 581-618 杨坚 大兴 
唐朝 618-907 唐高祖 长安 
五代十国 907-960 / / 
宋朝 北宋 960-1127 赵匡胤 开封 
南宋 1127-1279 高宗 临安 
辽朝 916-1125 耶律阿宝机 上京 
西夏 1038-1227 李元昊 兴庆 
金朝 1115-1234 阿骨打 中都 
元朝 1271-1368 忽必烈 大都 
明朝 1368-1644 朱元璋 南京→北京 
清朝 1644-1911 努尔哈赤 北京 
 



历史大事记

原始社会
 

约170万年前 元谋人生活在云南元谋一带 
约80万年前 蓝田人生活在陕西蓝田一带 
约20——70万年前 北京人生活在北京周口店一带 
约18000年前 山顶洞人开始氏族公社的生活 
约5000——7000年前 河姆渡 半坡母系氏族公社 
约4000——5000年前 大汶口文化中晚期 父系氏族公社 
约4000多年前 传说中的黄帝 尧 舜 禹时期 

奴隶社会 
夏(约公元前21世纪到约公元前16世纪) 
约公元前21世纪 禹传子启 夏朝建立 
商(约公元前16世纪到约公元前11世纪) 
约公元前16世纪 商汤灭夏 商朝建立 
约公元前14世纪 商王盘庚迁都殷 
西周(约公元前11世纪到公元前771年) 
约公元前11世纪 周武王灭商 西周开始 
公元前841年 国人暴动 共和元年 我国历史开始有明确纪年 
公元前771年 犬戎攻入镐京 西周结束 
春秋(公元前770年到公元前476年) 
公元前770年 周平王迁都洛邑 东周开始 

封建社会 
战国(公元前475年到公元前221年) 
公元前356年 商鞅开始变法 
秦(公元前221年到公元前206年) 
公元前221年 秦统一 秦始皇确立郡县制 统一货币 度量衡和文字  
公元前209年 陈胜 吴广起义爆发 
公元前207年 巨鹿之战 
公元前206年 刘邦攻入咸阳 秦亡 
公元前206年——公元前202年 楚汉之争 
西汉(公元前202年到公元8年) 
公元前202年 西汉建立 
公元前138年 119年 张骞两次出使西域 
公元8年 王莽夺取西汉政权 改国号新 
17 18年 绿林赤眉起义爆发 
东汉(25年到220年) 
25年 东汉建立 
73年 班超出使西域 
105年 蔡伦改进造纸术 
184年 张角领导黄巾起义 
200年 官渡之战 
208年 赤壁之战 
三国(220年到280年) 
220年 魏国建立 
221年 蜀国建立 
222年 吴国建立 
263年 魏灭蜀 
265年 西晋建立 魏亡 
西晋(265年到316年) 
280年 西晋灭吴 
316年 匈奴兵攻占长安 西晋结束 
东晋(317年到420年) 
317年 东晋建立 
383年 淝水之战 
南北朝(420年到589年) 
420年 南朝宋建立 南朝的开始 
485年 北魏实行均田制 
494年 北魏孝文帝迁都洛阳 
隋(581年到618年) 
581年 隋朝建立 北朝结束 
589年 隋统一南北方 南朝结束 
605年 开始开通大运河 
611年 隋末农民战争开始 山东长白山农民起义 
唐(618年到907年) 
618年 唐朝建立 隋朝灭亡 
627年——649年 贞观之治 
7世纪前期 松赞干布统一吐蕃 
8世纪前期 粟末秣褐建立的政权 以渤海为号 
同一时期 南诏首领皮罗阁合并六诏为南诏 
8世纪中期 骨力裴罗统一回纥 
713年——741年 开元盛世 
755年——763年 安史之乱 
780年 实行两税法 
875年——884年 唐末农民战争 
五代(907年到960年) 
907年 后梁建立 唐亡 五代开始 
916年 耶律阿保机建立契丹政权 
北宋(960年到1127年) 
960年 北宋建立 
979年 北宋结束五代十国的分裂局面 
1005年 宋 辽澶渊之盟 
1038年 元昊建立西夏 
11世纪中期 毕晟发明活字印刷术 
1069年 王安石变法 
1115年 完颜阿骨打建立金 
1125年 金灭辽 
南宋(1127年到1276年) 
1127年 金灭北宋 南宋开始 
1140年 宋 金郾城大战 
1206年 成吉思汗建立蒙古政权 
1227年 蒙古灭西夏 
1234年 蒙古灭金 
元(1271年到1368年) 
1271年 忽必烈定国号元 
1276年 元灭南宋 
1351年 刘福通等领导红巾军大起义 
明(1368年到1644年) 
1368年 明朝建立 盟军攻占大都 元亡 
明初 开始修建明长城 
1405年——1433年 郑和七次“下西洋” 
1421年 明成祖迁都北京 
明朝中后期 资本主义萌芽在江南开始出现 
16世纪中期 戚继光在东南沿海抗击倭寇 
1581年 实行一条鞭法 
1616年 努尔哈赤建立后金 
1628年 明末农民战争爆发 
1636年 后金改国号为清 
1644年 李自成建立大顺政权 农民军攻占北京 明亡 
清(鸦片战争以前)(1644年到1840年) 
1644年 清军入关 
1662年 郑成功收复台湾 
1684年 清朝设置台湾府 
1685 1686年 雅克萨自卫反击战 
1689年 中俄签订《尼布楚条约》 
1696年 昭莫多战役 
1727年 清朝设置驻藏大臣 
18世纪中期 维吾尔贵族大和卓 小和卓发动叛乱 
1771年 土尔扈特部重返祖国

附:中国历史朝代简表

朝代 起止年代 创建人 都 城 

黄帝尧舜禹 约170万-4000年前 黄帝尧|舜 / 
夏朝 前2100-1600 启 阳城 
商朝 前1600-1100 汤 亳→殷 
西周 前1100-771 武王 镐 
东周 前770-256 周平王 洛邑 
春秋 前770-476 / 洛邑 
战国 前475-221 / /
 
秦朝 前221-206 秦始皇 咸阳 
西汉 前202-公元8年 汉高祖 长安 
新朝 8-23 王莽 长安 
东汉 25-220 光武帝 洛阳 

三国
魏 220-265 曹操 洛阳 
蜀 221-263 刘备 成都 
吴 229-280 孙权 建业 
西晋 265-316 司马炎 洛阳 
东晋 317-420 司马睿 建康 
十六国 304-439 / /
 
南北朝 420-581 / / 
隋朝 581-618 杨坚 大兴 
唐朝 618-907 唐高祖 长安 
五代十国 907-960 / / 
宋朝 北宋 960-1127 赵匡胤 开封 
南宋 1127-1279 高宗 临安 
辽朝 916-1125 耶律阿宝机 上京 
西夏 1038-1227 李元昊 兴庆 
金朝 1115-1234 阿骨打 中都 
元朝 1271-1368 忽必烈 大都 
明朝 1368-1644 朱元璋 南京→北京 
清朝 1644-1911 努尔哈赤 北京 
 



历史大事记

原始社会
 

约170万年前 元谋人生活在云南元谋一带 
约80万年前 蓝田人生活在陕西蓝田一带 
约20——70万年前 北京人生活在北京周口店一带 
约18000年前 山顶洞人开始氏族公社的生活 
约5000——7000年前 河姆渡 半坡母系氏族公社 
约4000——5000年前 大汶口文化中晚期 父系氏族公社 
约4000多年前 传说中的黄帝 尧 舜 禹时期 

奴隶社会 
夏(约公元前21世纪到约公元前16世纪) 
约公元前21世纪 禹传子启 夏朝建立 
商(约公元前16世纪到约公元前11世纪) 
约公元前16世纪 商汤灭夏 商朝建立 
约公元前14世纪 商王盘庚迁都殷 
西周(约公元前11世纪到公元前771年) 
约公元前11世纪 周武王灭商 西周开始 
公元前841年 国人暴动 共和元年 我国历史开始有明确纪年 
公元前771年 犬戎攻入镐京 西周结束 
春秋(公元前770年到公元前476年) 
公元前770年 周平王迁都洛邑 东周开始 

封建社会 
战国(公元前475年到公元前221年) 
公元前356年 商鞅开始变法 
秦(公元前221年到公元前206年) 
公元前221年 秦统一 秦始皇确立郡县制 统一货币 度量衡和文字  
公元前209年 陈胜 吴广起义爆发 
公元前207年 巨鹿之战 
公元前206年 刘邦攻入咸阳 秦亡 
公元前206年——公元前202年 楚汉之争 
西汉(公元前202年到公元8年) 
公元前202年 西汉建立 
公元前138年 119年 张骞两次出使西域 
公元8年 王莽夺取西汉政权 改国号新 
17 18年 绿林赤眉起义爆发 
东汉(25年到220年) 
25年 东汉建立 
73年 班超出使西域 
105年 蔡伦改进造纸术 
184年 张角领导黄巾起义 
200年 官渡之战 
208年 赤壁之战 
三国(220年到280年) 
220年 魏国建立 
221年 蜀国建立 
222年 吴国建立 
263年 魏灭蜀 
265年 西晋建立 魏亡 
西晋(265年到316年) 
280年 西晋灭吴 
316年 匈奴兵攻占长安 西晋结束 
东晋(317年到420年) 
317年 东晋建立 
383年 淝水之战 
南北朝(420年到589年) 
420年 南朝宋建立 南朝的开始 
485年 北魏实行均田制 
494年 北魏孝文帝迁都洛阳 
隋(581年到618年) 
581年 隋朝建立 北朝结束 
589年 隋统一南北方 南朝结束 
605年 开始开通大运河 
611年 隋末农民战争开始 山东长白山农民起义 
唐(618年到907年) 
618年 唐朝建立 隋朝灭亡 
627年——649年 贞观之治 
7世纪前期 松赞干布统一吐蕃 
8世纪前期 粟末秣褐建立的政权 以渤海为号 
同一时期 南诏首领皮罗阁合并六诏为南诏 
8世纪中期 骨力裴罗统一回纥 
713年——741年 开元盛世 
755年——763年 安史之乱 
780年 实行两税法 
875年——884年 唐末农民战争 
五代(907年到960年) 
907年 后梁建立 唐亡 五代开始 
916年 耶律阿保机建立契丹政权 
北宋(960年到1127年) 
960年 北宋建立 
979年 北宋结束五代十国的分裂局面 
1005年 宋 辽澶渊之盟 
1038年 元昊建立西夏 
11世纪中期 毕晟发明活字印刷术 
1069年 王安石变法 
1115年 完颜阿骨打建立金 
1125年 金灭辽 
南宋(1127年到1276年) 
1127年 金灭北宋 南宋开始 
1140年 宋 金郾城大战 
1206年 成吉思汗建立蒙古政权 
1227年 蒙古灭西夏 
1234年 蒙古灭金 
元(1271年到1368年) 
1271年 忽必烈定国号元 
1276年 元灭南宋 
1351年 刘福通等领导红巾军大起义 
明(1368年到1644年) 
1368年 明朝建立 盟军攻占大都 元亡 
明初 开始修建明长城 
1405年——1433年 郑和七次“下西洋” 
1421年 明成祖迁都北京 
明朝中后期 资本主义萌芽在江南开始出现 
16世纪中期 戚继光在东南沿海抗击倭寇 
1581年 实行一条鞭法 
1616年 努尔哈赤建立后金 
1628年 明末农民战争爆发 
1636年 后金改国号为清 
1644年 李自成建立大顺政权 农民军攻占北京 明亡 
清(鸦片战争以前)(1644年到1840年) 
1644年 清军入关 
1662年 郑成功收复台湾 
1684年 清朝设置台湾府 
1685 1686年 雅克萨自卫反击战 
1689年 中俄签订《尼布楚条约》 
1696年 昭莫多战役 
1727年 清朝设置驻藏大臣 
18世纪中期 维吾尔贵族大和卓 小和卓发动叛乱 
1771年 土尔扈特部重返祖国

Derby(Java DB)简介

      Java6开始,SunJDK就附带了一个轻量级的数据库,名字叫做Derby。也就是Java DB,由IBM2004年捐给Apache开源项目组。Derby是一个事务关系型的数据库管理系统,体积非常的小,所有的加起来大约2M左右吧。在最新的Java JDK6发布版里,Derby默认安装在%JAVA_HOME%\db目录下,包括核心库,演示程序以及一个例子数据库。Derby的优势在于体积小,管理操作简单。对于开发者来说,你可以轻易地用代码来创建和使用数据库,进行所有的数据库操作也是相当方便的。在系统的开发阶段使用Derby,可以加快开发速度。加上Java JDBC的跨数据库平台性,要转换数据库实现也是很容易的。

 

       下面就来讲讲Derby的基本使用:

       Derby提供了一个命令行工具:ij  表示交互式JDBC脚本工具。通过ij,我们可以连接到数据库,对数据库进行各种操作。要使用ij工具,你必须把下面两个jar文件放到你系统的CLASSPATH中,关于CLASSPATH的设置,你可不要告诉我你不会啊!

       %JAVA_HOME%\db\lib\derby.jar

%JAVA_HOME%\db\lib\derbytools.jar

 

其中,derby.jar包含JDBC驱动,derbytools.jarij工具本身。设置好CLASSPATH后,我们就可以输入下面的命令来使用ij工具,这里我们以Derby自带的演示数据库toursdb为例:

E:\我的文档>java org.apache.derby.tools.ij

ij 版本 10.2

ij> connect ‘jdbc:derby:c:\Program Files\Java\jdk1.6.0\db\demo\databases\toursdb’;

ij> SELECT * FROM countries WHERE country LIKE 'C%';

COUNTRY                   |C&|REGION

--------------------------------------------------------

Cambodia                  |KH|Asia

Cameroon                  |CM|Africa

Canada                    |CA|North America

Cape Verde                |CV|Africa

Chile                     |CL|South America

China                     |CN|Asia

Colombia                  |CO|South America

Congo                     |CG|Africa

Costa Rica                |CR|Central America

Cote d'Ivoire             |CI|Africa

Cuba                      |CU|Caribbean

Czech Republic            |CZ|Europe

 

已选择 12

ij>exit;

 

这样就退出了ij,下面讲一下新建数据库和表的操作。要创建数据库,我们需要给connect命令带上一个”create=true”参数。如果之前已经连上一个已存在的数据库,那应该先使用disconnect命令断开连接:

ij> connect 'jdbc:derby:C:\Program Files\Java\jdk1.6.0\db\demo\databases\toursdb';

ij> disconnect;

ij> connect 'jdbc:derby:TestDB;create=true';

ij> CREATE TABLE book(title VARCHAR(50), isbn CHAR(13), author VARCHAR(50));

已插入更新删除 0

ij> INSERT INTO book VALUES('Thinking in Java', '1234-37-134-7', 'Bruce Eckel');

已插入更新删除一行

ij> INSERT INTO book VALUES('Core Java', '8888-37-134-8', 'Cay Hostman');

已插入/更新/删除一行

ij> SELECT * FROM book;

TITLE                                             |ISBN         |AUTHOR

 

--------------------------------------------------------------------------------

-----------------------------------

Thinking in Java                                  |1234-37-134-7|Bruce Eckel

 

Core Java                                         |8888-37-134-8|Cay Hostman

 

已选择 2

ij>exit;

 

使用connect 'jdbc:derby:TestDB;create=true';创建新数据库TestDBDerby会在当前目录你输入java org.apache.derby.tools.ij时所在的目录)创建一个数据库,子目录名就是数据库的名称。同时在当前目录还会创建一个derby.log文件,这是一个错误日志文件,记录了异常情况下的一些信息。TestDB目录下的文件,保存的就是整个数据库的信息了,我们绝不应该直接修改这些文件!

 

如上面所示Derby提供的命令行工具很容易使用。运行命令后,使用connect来连接数据库,之后就可以使用SQL语言来对数据库进行常用的操作了。Derby实现了SQL-92的核心子集,同时也实现了SQL-99的部分特性。关于Derby具体的使用和操作,请参考Apache网站的在线文档:

Getting started: http://db.apache.org/derby/docs/10.2/getstart/

Derby Reference Manual: http://db.apache.org/derby/docs/10.2/ref/

Derby Developer's Guide: http://db.apache.org/derby/docs/10.2/devguide/

 

好了,关于Derby的使用就写到这里吧!我打算接下来再写一篇关于JDBC4的文章,到时会再次使用到Derby数据库,也会更加详细的讲解Derby的使用!

 

最后提一下,之前我一直是使用HSQLDB的。HSQLDB也是一个开源的小型数据库,功能强大且使用方便,关于两者的优劣对比,我并没有做过,也没有说这个话的能力。至于使用哪个,选择权完全在你的手上。不过既然Java6Derby包含在发布版里,那估计今后Derby也会被更多人了解和使用吧。

本文参考了:Wrox.Professional.Java.JDK.6.Edition.Jan.2007一书第一部分第一章

 

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1525721


JSP页面中连接IBM Cloudscape(derby)数据库-JSP教程,Jsp/Servlet



以前写过一个jsp页面中连接mysql的例子



连接derby时,只是jdbc的连接属性有所改变,大同小异而已。



derby数据库与mysql不同的是,它有两种连接方式:embbed 和 net server



这里只用了第一种embbed的形式,第二种还没有试过。



系统运行环境:winxp+jdk1.4.2+tomcat+cloudscape10.0



以下是具体的网页代码:



<html>

<head><title>derbyconnect.jsp</title></head>

<body>

<%@ page language="java" import="java.sql.*" import="java.util.properties" %>

<%

string databaseurl ="jdbc:derby:c:\\database\\jimmydb"; //c:\\database\\jimmydb是数据库的存放位置





try{

class.forname("org.apache.derby.jdbc.embeddeddriver"); //derby数据库的embbed驱动名

out.println("success loading derby driver!");

}

catch(exception e)

{

out.print("error loading derby driver!");

e.printstacktrace();

}





try{

properties properties = new properties();

properties.put("create", "true");//新建数据库

properties.put("user", "app");//用户名

properties.put("password", "app"); //密码



properties.put("retreivemessagesfromserverongetmessage", "true");

//get a connection

connection connect= drivermanager.getconnection(databaseurl, properties);

out.print("success connect derby server!");



statement s = connect.createstatement();



s.execute("create table jimmydb2(num int, addr varchar(40))");







out.println("created table jimmydb2");

s.execute("insert into jimmydb2 values (1956,webster st.)");

out.println("inserted 1956 webster");

s.execute("insert into jimmydb2 values (1910,union st.)");

out.println("inserted 1910 union");

s.execute("update jimmydb2 set num=180, addr=grand ave. where num=1956");

out.println("updated 1956 webster to 180 grand");



s.execute("update jimmydb2 set num=300, addr=lakeshore ave. where num=180");

out.println("updated 180 grand to 300 lakeshore");





resultset rs = s.executequery("select num, addr from jimmydb2 order by num");











while(rs.next())

{

out.println(rs.getint(1));

out.println(rs.getstring(2));

}



}

catch(exception e)

{

out.print(" error!");

e.printstacktrace();

}



%>



</body></html>







我在百度贴吧上的回帖——关于学生组织是褒是贬

原帖地址:

http://post.baidu.com/f?kz=137503532

回帖正文如下:

LZ和猫猫的帖子我看了都很有感触。
LZ犀利的语言确实厉害,揭示了学生会和社团的存在一些问题。猫猫的帖子也是字里行间透着真情实感,让我不禁为之纵容。
我也曾经是学生会的一个干事。后来又做了一个社团。现在即将毕业,已经开始在社会上闯荡了。作为过来人,对于上面的两种看法,我并不想单纯的说支持哪一个或者批判哪一个。下文中,我把学生会和社团统一称作学生组织。尽管有些人可能不承认这个叫法。
诚然,当今大学的学生组织的确存在着一些社会上的不良风气。比如拉帮结派、暗箱操作、嫉贤妒能、溜须拍马等等。但是我们很难想象这样的风气是怎么形成的。我也曾经因为这些问题而思索。也许我想的比较简单。我认为这样的风气的形成有很多因素,最主要的有如下几条:
1.大前提:中国是一个讲究礼尚往来的“礼仪之邦”。似乎从几千年的文化进展来看,中国人就是把权和贵联系在一起的。加之儒家文化对中国影响深厚,国人自然对于权和利看的比较重。整个社会的价值取向就是谁的地位高,谁的钱多,谁的官大,谁就成为社会眼中的成功人士。而校园文化做为社会大环境中的一部分,做为中国几千年“礼”文化的一隅,一点影响不受恐怕是不现实的。
2.桥梁:家庭。人是复杂的。社会是由人组成的。人有多种多样。有的和社会格格不入,保持着一种精神上的孤高。有的则认同大众的价值取向。还有的可能有自己的其他主张。做为社会人的子女的我们,进入校园,很难说有哪个学生没有带着家庭的熏陶来到这里的。所以,不同的家庭对于子女的教育和灌输也不一样。这就造成了校园文化的组成群体的多样化。难免就会有一些对于功和利比较看重的群体会出现在学生会等学生组织里。
3.沿袭:学生组织的风气很大程度上是沿袭下来的。我们都知道,学生组织的换届工作一般都是由上届的学长培养几个下届的种子选手,然后到了换届的时候让他们继任。或者至少是要把自己工作的一些方法和经验传授给下届。这样,上一届学生组织的风气就自然而然传到下届学生组织。
总之,沿袭下来的风气,加上家庭的熏陶,社会大环境感染,我们民族的大文化的影响,学生组织里出现一些不正之风是不可避免的。
LZ一味的怪罪学生组织里的成员鱼龙混杂、良莠不齐,也许是希望学生组织和校园文化能回归他本来的纯美和无邪。但是LZ仅仅是发泄了自己的不满,却没有提出可行的意见。并且在论述的过程中,将学生组织里的各种成员一概而论,我认为是片面的。
我们当然承认学生组织出现了LZ所批判的种种问题,而且是非常严重的问题。如果学生组织里就出现了很多不正之风,而学生组织成员又是做为学校向社会首推的人才,那么,社会的不正之风恐怕也很难遏制了。这样的问题我认为在于学校正确的引导。很多时候,学生组织大多处于一种自由发展的状态,即使有学校干预,很多时候也是为了学校的利益。我想,做过学生组织成员的人心里都清楚,有时候不是我们乐于怎样去做,而是学校、领导和老师的压力,有时候我们不愿做的也要做。换句话说,作为社会人的学校领导和老师有时候也会把一些社会的潜规则强加在学生组织里面。
学校有责任进行校园文化的整顿。对于自由发展和受到不良干预的学生组织,我们应该怎样做?我们能怎样做?这恐怕不是仅仅我们学生应该思考的。
再回头来看看学生组织的价值:
1.锻炼交际能力:我这里提到的交际能力不是说去学习社会上的什么溜须拍马或者拉帮结派。人处在社会当中,交际能力是非常关键的。如何让周围的人正确的评价自己,自己又如何正确的评价自己和他人,这是一个很重要的问题。交际就是要通过沟通的方式来达到这样一个目的。在学生组织这样一个小社会里面,如何能让各种各样的人对自己有一个好的评价,或者如何广聚各方圣贤帮助自己达成目标,这不仅仅是一个在学生会必须具备的能力,也是以后走向社会必须学会的能力。也许在学校这个环境里,我们还是太关注自己的生活状态,做缺乏了对于人生的规划和对社会的了解,所以难免只会注意食堂的饭菜、学校管理、宿舍管理、学习环境等这些小问题。但是当我们放眼整个大的世界,我们会发现,生活在学校这个小环境里的我们,稍不留心就会陷入对于自身和周围小环境的怀疑和不确定之中。毕竟,我们不可能永远坐在校园里,拿着笔数着下课的剩余秒,也不可能永远在校园里不停游戏,嘴里抱怨食堂的饭菜如何差、学校的管理如何不人性化等等。当你走上社会,你会发现,曾经的抱怨都是那么小儿科,曾经的悠闲都是那么的不应该。大学和社会的差距不仅仅在专业能力上,更在于做人之道。如何能顺应社会,但是在物欲横流的世界里又保持不迷失,为自己的心灵留下一片坚守的净土,这的确不是很容易的事情。所以,学生组织的作用不仅仅在于她让我们学会如何与他人相处,更让我们学会如何适应社会。从这个角度上讲,如果学生组织真的成为一个真正意义上没有社会风气的净土的话,我们很难说这到底是多给大学生留下了一片净土还是给大学生多留下了一片让他们成为社会白痴的毒药。
2.发挥自身才能:学生组织也许有它务虚不务实的一面,但是我们必须看到学生组织还是要出一些成绩的。不管这些成绩是学生们自发想出还是迫于学校压力而出,但是你绝对不可以小视那些为学生组织做了很多实际工作的人。他们有的也许有官衔,也许有的只是普通的干事,但是如果没有学生组织充实了他们的生活,也许他们不会去学习如何制作并管理网站,也不会去学习如何去管理帐目,如何去写计划书、报告书等东西,更不要谈去策划什么东西了。这些经历不是那些漠不关心的人在网吧里打打游戏或者发发牢骚就能获得的,这些经历留下的知识、回忆、友情。。。这一切珍贵的东西难道是我们仅仅用一些阴暗面就能否认的吗?事实上,很多学生组织的成员都没有浪费他们的时间,或者学会了如何适应社会,或者学会了技术,或者学会了做人。。。各有所获。当然,有些人尽可以来批驳我这种说法,说他们学会了如何巴结上级,学会了如何偷梁换柱,学会了如何做一个狡猾的人。。。无所谓,没有谁要求这个世界上的思想都是一样的,正如我们学会的能力是各有所获一样,大家都各有所想罢了,只不过也许有些人仅仅学会了盯住了生活中的阴暗面发牢骚,却没有学会如何去解决。当然最后走上社会的时候,也各有所司,那时候就要看各位的真本事了。所以,在学生组织里发挥什么样的才能,学会什么样的本领,大家也是各取所需吧。
3.结交朋友:也许LZ所说的进入学生组织找异性伙伴的事实曾经发生过?但是我们必须看到的是,在学生组织共事的人,也许有的人和你观点不同,但也不乏志同道合之人。通过学生组织去寻找那些你欣赏的、有能力的人来做朋友是大学里为数不多的一件乐事。举个最没有说服力的例子,猫猫和本人就是非常好的朋友。本人很庆幸通过学生组织认识了猫猫以及和他一样优秀的很多朋友。从他们身上,我体会过感动,体会过真情,也学会了很多。走上社会以后,面临着事业的起步,除了那些在新的征途上结实的好友,那些曾经的学长朋友也好、学弟学妹也好,他们都会成为你宝贵的精神支柱。
4.培养责任感:也许有些学生组织成员仅仅是为了自己的利益在运作着。但是,我们必须承认,不管是不是自愿,当学生组织成员完成一件工作的时候,他的责任心得到了极大的提升。很多学生组织成员完全不是LZ所说的那样,缺乏责任心。相反,正如猫猫提到的广播站的广播员、网站的建设者、宣传部的干事、那些垫钱为了学生组织工作的。。。太多太多的事实证明,真正想做好本职工作的学生组织成员的责任心都是如火一样热。也许有人抱怨食堂饭菜差,也许有人抱怨教室卫生没人管,但是饭菜差的问题是学生组织的职责范围么?教室卫生是靠大家自觉维护的,为什么一定要让学生组织像管理宿舍卫生一样管起来呢?既然学生组织的简单卫生管理起不到什么作用,那么为什么宿舍一到没有管理的周六周日就会发生被褥不叠,宿舍地面垃圾成堆等令人恶心的现象呢?也许很多学生眼中,学生组织应该代表学生的利益,当学生的利益出现问题的时候,他们需要有人来帮他们反映现实。对于来自学生组织的管理,很多学生倒是认为是侵害了自己的利益,比如所谓的行为自由。然而真正令人困惑的现实是,当学生组织遇到困难的时候,又有谁能为他们站出来反映问题?归根到底,学生组织仍然处于学校的管理之下,从机构设置上讲,这是中国大学的失败,因为没有体现平等公正的组织结构编制。看看国外的著名大学,有哪个学生组织不是独立于学院的管理机构的?学生组织在目前中国的大学里还无法做为学生利益的完全代表而独立出现,这是一个普遍的不争事实,是我们教育管理体制的失败,LZ却因此将傀儡组织的恶名贯在和普通学生一样无助的学生组织头上,实属不妥。
关于学生组织的价值我也不想再多说什么了。
总之,学生组织好处很多,问题也很多。我们都希望有一个公正的、健全的管理体制来约束学生组织的发展,来为中国的青年人创造良好的成长环境。这不仅仅是一个人或者一个组织的力量。它需要全社会的关心,需要对教育管理体制进行改造。
最后感谢LZ发现了这么让人深思的问题(也许会让教育专家震惊?)。也感谢猫猫提出了不同的观点,让学生组织没有蒙受不该有的冤屈。
再次感谢曾经为学生组织的良好发展做出努力的所有人。(也包括猫猫*^_^*)
祝学生组织能够早日摆脱不良发展的现状,真正进入良性循环的局面。

端正心态

端正心态!不管做什么,都要努力做好,因为很多时候事情都不是按我们的意愿发展的。不要很挑剔,因为跟高手比起来,你不够格。既然来了,就让人们知道,你要征服它!

Visual Web Pack学习笔记2

1.Application 作用域持续到服务器停止该应用。存储在Application bean中的值对于任何采用同一应用地图的会话和请求都可用。
Session作用域始于用户第一次访问Web应用中的一个页面,结束于不活动引起的会话超时,或者当Web应用使得会话无效,例如,调用session.invalidate();
Request作用域始于用户提交页面,结束于相应完全返回,不管那是什么页面。
2.重定向时,redirect时,不能将值保存在RequestBean中,因为元素会重定向到页面,并在下一个页面能够使用RequestBean中的任何变量之前先结束请求。3.每一个PageBean都具有error\fital\info等属性,用于向消息框提供消息显示。error(可能引发消息的组件,消息字符串)-- X-Spirit

Visual Web Pack学习笔记(1):

1.设置起始页:创建项目以后的默认页面即为起始页。项目树中,Page1上的绿色的小三角图标表示该页面为起始页。如果要指定其他页面为起始页,在期望的页面上右击,选择“设置为起始页”即可。
2.文件视图中的文件小图标旁边的红色小图标表示该文件需要被编译。
3.导航窗口可以输入文字,以便快速查看某个方法。
4.按钮中的属性:Primary可以将一个按钮突出显示。
5.标签和文本域之间的关联的建立:Ctrl+Shift+Drag拖动到希望的控件上。然后for属性就被指定了。任何组件之间的关联都可以这样建立!
6.标签的LabelLevel属性可以指定Label的样式,也就是文字的大小和粗细程度。
7.单选按钮组:column属性值:如果是1就是竖排。如果是2就是网格排列。如果是3就是横排。
8.验证器和转换器:用于验证用户输入和表单输出。
9.消息框和消息组:消息框用于显示某个组件的异常消息。 可以自动显示转换错误、验证错误、以及必填项目信息。消息组组件用于显示全局错误、运行时信息并可以有选择的显示全部组件的错误信息。
10.使用应用Bean、会话Bean以及请求bean来存储其他页面需要的信息。
使用应用Bean来为所有用户会话提供信息。例如为下拉列表组件提供一个静态选项列表。
使用会话Bean来存储用户会话过程中其他页面要用到的信息,比如用户的登录名!
如果你希望信息仅仅用于下一个页面,使用请求Bean。
任何存储在请求Bean中的值会在请求结束时消失。request是从客户端到服务器的一个单项HTTP请求传输,附加相应的回应,也就是另一个页面。大多数情况下,request始于按钮或者链接的点击,结束于一个HTML页面的显示。
Note: The Request Bean gets instantiated only if the page that initiates the request stores values in Request Bean properties, such as when an input component is bound to a Request Bean property as described below.
Warning: You cannot use the Request Bean if you have included the element inside the element of a navigation rule. (You see these rules when you click the Source button in the Page Navigation editor.) When the page is submitted, the element redirects the page and ends the request before a subsequent page can use any of the values stored in the Request Bean.
11.概要视图中在XXXBean1上点选添加按钮,可以添加属性。如果新添加的属性没有出现,请右键单击可视化设计器,然后选择刷新。
12.其实,对于Request和Session中的Bean完全可以理解为通过setter和getter方法为组件提供数据的数据提供器。当组件绑定数据到这些属性的时候,我们很快就能实现数据在不同页面之间的交换了。

JSP语法参考

http://java.sun.com/products/jsp/syntax/1.2/syntaxref12.html

JFreeChart初探

jFreeChart也许对大家来说很陌生,她是一款免费的、功能强大的统计图生成工具,可以直接生成PNG,JPG等各式的文件

为我们java项目的开发增加了一部利器。她的英文简介

JFreeChart is a free Java class library for generating charts, including:

pie charts;

line charts and horizontal/vertical bar charts (regular and stacked, with optional 3D-effect);

XY plots and scatter plots;

time series, high/low/open/close charts and candle stick charts;

combination charts;

Pareto charts;

Gantt charts;

bubble charts;

wind plots, meter charts and symbol charts;



正好我最近的一个项目用到她,于是就很粗略的看了一下,现在把它拿出来和大家分享,希望对大家的工作有所

帮助。



本文主要是讲解她在jsp上面的应用。例子采用jsp+javaBean结构实现



准备工作:首先我们需要什么?当然是jFreeChart的package了,可以在她的官方网站上面找到下载链接

http://www.jfree.org/jfreechart/,把包下下来,配置到tomcat当中,然后可以开始我们的Jfreechart之旅

了。



下面我要做的是一个饼状统计图,首先建立javaBean文件



文件名:Tryitshow.java



package com.tryit;



import java.io.*;

import java.awt.Insets;

import java.awt.Font;

import java.io.PrintWriter;

import java.text.SimpleDateFormat;

import java.util.Iterator;

import java.util.Locale;

import java.text.NumberFormat;

import javax.servlet.http.HttpSession;

import org.jfree.data.*;

import org.jfree.chart.*;

import org.jfree.chart.axis.*;

import org.jfree.chart.renderer.VerticalBarRenderer;

import org.jfree.chart.renderer.StandardXYItemRenderer;

import org.jfree.chart.plot.*;

import org.jfree.chart.entity.*;

import org.jfree.chart.tooltips.*;

import org.jfree.chart.urls.*;

import org.jfree.chart.servlet.*;

import org.jfree.chart.TextTitle;

import java.net.URL;



public class Tryitshow

{

public static String generatePieChart(String infoStr, String titles,HttpSession session, PrintWriter pw)

{

String filename = null;

Font font;



try {

// 建立PieDataSet

DefaultPieDataset data = new DefaultPieDataset();

String ss[]=infoStr.split(",");

for (int n=0;n<ss.length;n++)

{

String ssPart[]=ss[n].split("#");

int tt=Integer.parseInt(ssPart[1]);

String mm=ssPart[0];

data.setValue(mm,tt);

}



// 生成chart物件

PiePlot plot = new PiePlot(data);

plot.setInsets(new Insets(0, 5, 5, 5));



plot.setToolTipGenerator(new StandardPieToolTipGenerator());



font=new Font("黑体",Font.CENTER_BASELINE,20);//这个地方是设置统计图标题的字体和大小



JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);



TextTitle tt=new TextTitle(titles);

tt.setFont(font);

chart.setBackgroundPaint(java.awt.Color.white);//统计图片的底色

chart.setTitle(tt);



// 把生成的文件写入到临时的目录中

ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());

filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);

//选择存储成png格式的文件,当然你也可以使用saveChartAsJPEG的方法生成jpg图片



// 把image map 写入到 PrintWriter

ChartUtilities.writeImageMap(pw, filename, info);

pw.flush();

}

catch (Exception ex) {

System.out.println("error:"+ex.getMessage());

}

return filename;

}

}





接着是jsp文件

<%@ page contentType="text/html;charset=gb2312"%>

<%@ page import = "com.tryit.Tryitshow" %>

<%@ page import = "java.io.PrintWriter" %>

<%@ page import = "java.text.SimpleDateFormat" %>

<%@ page import = "java.text.ParseException" %>

<%@ page import = "java.util.ArrayList" %>

<%@ page import = "java.util.Date" %>

<%@ page import = "java.util.Iterator" %>

<%@ page import = "java.util.Locale" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

<META NAME="Generator" CONTENT="EditPlus">

<META NAME="Author" CONTENT="">

<META NAME="Keywords" CONTENT="">

<META NAME="Description" CONTENT="">

</HEAD>

<%

String filename = Tryitshow.generatePieChart("本科#100,专科#200","人才学历信息统计",session, new PrintWriter(out));



String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;

%>

<BODY>

<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">

</BODY>

</HTML>



ok,大功告成,当然,你可以采用其他方式,比如你可以把DataSet的数据设置在xml文件中,从xml文件读取

统计数据中添加百分比等等,还可以选择生成柱状图、折线图等。



jFreeChart还有很多其他的用法,希望大家可以多多交流。





web.xml文件的配置



<web-app>

<servlet>

<servlet-name>DisplayChart</servlet-name>

<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>DisplayChart</servlet-name>

<url-pattern>/servlet/DisplayChart</url-pattern>

</servlet-mapping>

</web-app>





使用JFreeChart创建图象

· 一:jfreechart介绍



jfreechart是一个免费创建图片的java工具.可以创建如下图形:

饼图(pie charts;)

曲线图(line charts )

柱状图(horizontal/vertical bar charts)

甘特图(Gantt charts; )

XY plots and scatter plots;

time series, high/low/open/close charts and candle stick charts;

combination charts;

Pareto charts;

bubble charts;

wind plots, meter charts and symbol charts;

从以下地址可以看到jfreechart可以创建的图形类型

http://www.jfree.org/jfreechart/samples.html

sourceforge有一个基于jfreechart的项目Cewolf可以很方便的在jsp/servlet中创建图片

jfreechart目前(2003-05-08)版本为0.98

希望得到详细的信息或下载jfreechart请访问如下站点:

http://www.jfree.org/jfreechart/



· 二:特别说明:



jfreechart是一个开源项目,但是文档是需要40美金去购买的。

还有一个很重要的问题,jfreechart如果使用中文,他使用的默认字体

显示出来的中文会很模糊,你可能需要修改源代码。

下面我就举几个简单的例子说明一下如何使用jfreechart创建图片

在开发中有可能会导入以下的类

import com.jrefinery.chart.ChartFactory;

import com.jrefinery.chart.ChartUtilities;

import com.jrefinery.chart.JFreeChart;

import com.jrefinery.chart.TextTitle;

import com.jrefinery.chart.axis.NumberAxis;

import com.jrefinery.chart.plot.CategoryPlot;

import com.jrefinery.chart.plot.PiePlot;

import com.jrefinery.data.Day;

import com.jrefinery.data.DefaultCategoryDataset;

import com.jrefinery.data.DefaultPieDataset;

import com.jrefinery.data.TimeSeries;

import com.jrefinery.data.TimeSeriesCollection;

import com.jrefinery.data.TimeSeriesDataPair;

在0.98以后包由com.jrefinery.*改变为:org.jfree



· 三:创建饼图



//图片标题

String title = "空调2002年市场占有率";

//设定数据源

DefaultPieDataset piedata = new DefaultPieDataset();

//第一个参数为名称,第二个参数是double数

piedata.setValue("联想", 27.3);

piedata.setValue("长城", 12.2);

piedata.setValue("海尔", 5.5);

piedata.setValue("美的", 17.1);

piedata.setValue("松下", 9.0);

piedata.setValue("科龙", 19.0);

//创建JFreeChart,都使用ChartFactory来创建JFreeChart,很标准的工厂设计模式

JFreeChart chart =

ChartFactory.createPieChart(title, piedata, true, true, true);

//设定图片标题

chart.setTitle(new TextTitle(title, new Font("隶书", Font.ITALIC, 15)));

//chart.addSubtitle(new TextTitle("2002财年分析", new Font("隶书", Font.ITALIC, 12)));

//设定背景

chart.setBackgroundPaint(Color.white);

//chart.s

//饼图使用一个PiePlot

PiePlot pie = (PiePlot)chart.getPlot();

//pie.setSectionLabelType(PiePlot.NAME_AND_PERCENT_LABELS);

pie.setSectionLabelType(PiePlot.NAME_AND_VALUE_LABELS);

//设定显示格式(名称加百分比或数值)

pie.setPercentFormatString("#,###0.0#%");

//设定百分比显示格式

pie.setBackgroundPaint(Color.white);

pie.setSectionLabelFont(new Font("黑体", Font.TRUETYPE_FONT, 12));

//设定背景透明度(0-1.0之间)

pie.setBackgroundAlpha(0.6f);

//设定前景透明度(0-1.0之间)

pie.setForegroundAlpha(0.90f);

//输出文件到指定目录

String rfname = MathUtil.getRoundCode(12) + ".jpeg";

String fileName = "d:/test/" + rfname;



try {

//可以保存文件为jpg或png格式。

ChartUtilities.saveChartAsJPEG(new File(fileName), 100, chart, 600, 600);

//第一个参数为文件名

//第二个参数质量

//第三个参数为哪个chart创建图片

//第四个宽度

//第五个高度

} catch (IOException exz) {

System.out.print("....Cant´t Create image File");

}



其实使用JFreeChart创建图片很简单,不同的的图片类型区别在于设置数据集

使用JFreeChart生成热点图表

<一>前言:

  JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目。它的功能十分强大,能创建饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等,并可生成PNG或JPG图片格式文件。
  本人在学习过程中发现,网上很多文章都是讲一些JFreeChart的基本应用,而对JFreeChart生成热点图表这样常用的功能虽有所提及却没有一个完整的例子,所以我就写一个简单示例供大家参考,希望对大家的学习有所帮助。

  <二>示例说明:

  假设有一个关于程序员北京,上海,广洲三地程序员学历,开发语言,薪金情况的调查。首先要以饼图显示程序员学历的分布情况(index.jsp)。点击饼图的每一部分会以柱状图显示该层次程序员所用开发语言和薪金的情况(barview.jsp)。重点演示怎样在饼图上添加链接。

  <三>准备工作:

  1.下载最新版本的JFreeChart,当前为jfreechart-1.0.0-rc1
下载地址:http://www.jfree.org/jfreechart/index.html

  2.解压文件,将jfreechart-1.0.0-rc1/lib下的jcommon-1.0.0-rc1.jar,jfreechart-1.0.0-rc1.jar复制到WEB应用的lib目录下。

  3.在web.xml文件中增加以下内容:





<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servletDisplayChart</url-pattern>
</servlet-mapping>

  <四>饼图页面代码(index.jsp)






<%@ page contentType="text/html;charset=GBK"%>
<%@ 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.StandardPieItemLabelGenerator"%>
<%@ page import="org.jfree.chart.urls.StandardPieURLGenerator"%>
<%@ page import="org.jfree.chart.entity.StandardEntityCollection"%>
<%@ page import="java.io.*"%>
<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=GBK">
<TITLE>nacl_zhuang@hotmail.com</TITLE>
</HEAD>
<BODY>
<%

DefaultPieDataset data = new DefaultPieDataset();
data.setValue("高中以下",370);
data.setValue("高中",1530);
data.setValue("大专",5700);
data.setValue("本科",8280);
data.setValue("硕士",4420);
data.setValue("博士",80);

PiePlot3D plot = new PiePlot3D(data);//3D饼图
plot.setURLGenerator(new StandardPieURLGenerator("barview.jsp"));//设定链接
JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色
chart.setTitle("程序员学历情况调查表");//可选,设置图片标题
plot.setToolTipGenerator(new StandardPieItemLabelGenerator());
StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);
PrintWriter w = new PrintWriter(out);//输出MAP信息
//500是图片长度,300是图片高度
String filename = ServletUtilities.saveChartAsPNG(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>
</BODY>
</HTML>

  生成的图片如下







  在浏览器中点右键->查看源文件会发现有以下一段HTML代码:





<map id="map0" name="map0">
<area shape="poly" coords="247,61,250,61,250,123,250,123" title="博士 = 80" alt="" href="barview.jsp?category=博士&pieIndex=0"/>
<area shape="poly" coords="148,112,153,102,160,92,170,83,182,76,196,70,212,65,229,62,247,61,250,123,250,123" title="硕士 = 4,420" alt="" href="barview.jsp?category=硕士&pieIndex=0"/>
<area shape="poly" coords="324,167,311,173,297,179,282,182,266,185,250,186,234,185,217,183,202,179,188,173,175,167,
  165,159,157,151,151,142,147,132,146,122,148,112,250,123,250,123" title="本科 = 8,280" alt=""
 href="barview.jsp?category=本科&pieIndex=0"/>
<area shape="poly" coords="307,72,324,80,338,91,347,103,352,117,352,131,347,144,338,156,324,167,250,123,250,123" title="大专 = 5,700" alt="" href="barview.jsp?category=大专&pieIndex=0"/>
<area shape="poly" coords="261,62,285,65,307,72,250,123,250,123" title="高中
 = 1,530" alt="" href="barview.jsp?category=高中&pieIndex=0"/>
<area shape="poly" coords="250,61,261,62,250,123,250,123" title="高中以下 = 370" alt="" href="barview.jsp?category=高中以下&pieIndex=0"/>
</map>


  这就是MAP信息,我们在IMG标签中加入usemap="#map0"就可以为饼图的每一部分加入链接。

  <五>柱状图页面代码:(barview.jsp)





<HTML>
<HEAD>
<META http-equiv=Content-Type content="text/html; charset=GBK">
<TITLE>nacl_zhuang@hotmail.com</TITLE>
</HEAD>

<body>

<%@ page contentType="text/html;charset=GBK"%>
<%@ page import="org.jfree.chart.ChartFactory,
org.jfree.chart.JFreeChart,
org.jfree.chart.plot.PlotOrientation,
org.jfree.chart.servlet.ServletUtilities,
org.jfree.data.category.*"%>
<%
CategoryDataset dataset;
String category=request.getParameter("category");
category= new String(category.getBytes("ISO8859_1"), "GBK");
if(category.equals("本科")||category.equals("高中")||category.equals("大专"))
{
 dataset=getDataSet();
}
else if(category.equals("硕士")||category.equals("博士"))
{
 dataset=getDataSet2();
}else
{
 dataset=getDataSet3();
}
String title=category+"程序员在各城市薪金情况统计";
JFreeChart chart = ChartFactory.createBarChart3D(title,
"城市",
"薪金",
dataset,
PlotOrientation.VERTICAL,
true,
false,
false);

String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, null, session);
String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
%>
<P ALIGN="CENTER">
<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= filename %>">
</P>
<%!
private static CategoryDataset getDataSet() {
 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 dataset.addValue(2000, "北京", "VB");
 dataset.addValue(1800, "上海", "VB");
 dataset.addValue(2200, "广州", "VB");
 dataset.addValue(3200, "北京", "JAVA");
 dataset.addValue(3500, "上海", "JAVA");
 dataset.addValue(3600, "广州", "JAVA");
 dataset.addValue(3300, "北京", "DOT NET");
 dataset.addValue(3400, "上海", "DOT NET");
 dataset.addValue(3700, "广州", "DOT NET");
 dataset.addValue(2500, "北京", "DELPHI");
 dataset.addValue(2800, "上海", "DELPHI");
 dataset.addValue(3200, "广州", "DELPHI");
 dataset.addValue(5000, "北京", "VC");
 dataset.addValue(3500, "上海", "VC");
 dataset.addValue(4600, "广州", "VC");
 return dataset;
}
private static CategoryDataset getDataSet2() {
 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 dataset.addValue(2000, "上海", "VB");
 dataset.addValue(3000, "北京", "JAVA");
 dataset.addValue(3330, "上海", "JAVA");
 dataset.addValue(3500, "广州", "JAVA");
 dataset.addValue(3500, "北京", "DOT NET");
 dataset.addValue(4000, "上海", "DOT NET");
 dataset.addValue(4800, "广州", "DOT NET");
 dataset.addValue(2600, "北京", "DELPHI");
 dataset.addValue(2200, "上海", "DELPHI");
 dataset.addValue(4000, "北京", "VC");
 dataset.addValue(4000, "上海", "VC");
 dataset.addValue(4200, "广州", "VC");
 return dataset;
}
private static CategoryDataset getDataSet3() {
 DefaultCategoryDataset dataset = new DefaultCategoryDataset();
 dataset.addValue(2100, "北京", "VB");
 dataset.addValue(2200, "上海", "VB");
 dataset.addValue(2100, "广州", "VB");
 dataset.addValue(3000, "北京", "JAVA");
 dataset.addValue(3200, "上海", "JAVA");
 dataset.addValue(3600, "广州", "JAVA");
 dataset.addValue(4100, "北京", "DOT NET");
 dataset.addValue(4200, "上海", "DOT NET");
 dataset.addValue(4160, "广州", "DOT NET");
 dataset.addValue(2400, "北京", "DELPHI");
 dataset.addValue(2600, "上海", "DELPHI");
 dataset.addValue(2500, "广州", "DELPHI");
 dataset.addValue(5400, "北京", "VC");
 dataset.addValue(5000, "上海", "VC");
 dataset.addValue(5500, "广州", "VC");
 return dataset;
}
%>
</body>
</html>

  生成图片如下:







  <六>后记

  1.这是本人发表的第一篇文章,如有不妥之处,请大家指正。

  2.本人以程序员学历调查为例,实属对很多企业不接受低学历程序员的现象身有感触。本人认为,如果一个低学历的人真正的的想做程序员,他就会比其他人更加刻苦学习更多的知识。如果一个企业愿意用一个没有学历的程序员,他也会对这家企业心存感激,认真工作,不会轻易跳槽。

jfreechart火速应用


JAVA中的图表方面,Jfreechart是十分不错的老大了,网上有个具体的英文手册类库下载可以参考的,下面以一个
投票的例子来个火速应用,简单介绍一下

首先,可以将投票结果以servlet的形式输出给页面。第一步要接受参数(如要显示的图形类型,是柱状图,饼形图还是其他什么样的图),
然后传入数据集,然后设置输出的类型,最后输出图形

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

ublic class ChartServlet extends HttpServlet
{


 public void doPost( HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException
 {
  
//这里先得到一个vote的对象实例
   Vote vote=getvote();

  
  // 得到JFreeChart对象的实例
  JFreeChart chart = getChart( vote );

  // 设置输出对象的类型
  response.setContentType( "image/jpeg" );

  // 输出图形
  ChartUtilities.writeChartAsJPEG( response.getOutputStream(),
   100, chart, 400, 300, null);
 }
 
 
 public void doGet( HttpServletRequest request, HttpServletResponse response )
   throws ServletException, IOException
 {
  doPost( request, response );
 }

// 得到JFreeChart对象的实例
 public static JFreeChart getChart( Vote vote )
 {
  JFreeChart chart = null;

  // 判断是否为饼图
  if( .... )
  {
   // 组织生成饼图的数据
   DefaultPieDataset data = new DefaultPieDataset();
   
   Iterator it = vote.getVoteitems().iterator();

//遍历数据集
   while( it.hasNext() )
   {
    VoteItem vi = (VoteItem)it.next();
//设置要显示图形每一项的标题,具体数字(这里是投票数vi.getvotenum了)
    data.setValue( vi.getTitle(), vi.getVotenum() );
   }
   
   // 判断是否为普通饼图
   if( ..... )
   {
    chart = ChartFactory.createPieChart( vote.getTitle(),
      data, false, false, false );
   }
   else // 3D饼图
   {
    chart = ChartFactory.createPieChart3D( vote.getTitle(),
      data, false, false, false );
   }
  }
  else
  {
   // 组织柱状图的数据
   DefaultCategoryDataset data = new DefaultCategoryDataset();
   
   Iterator it = vote.getVoteitems().iterator();
   while( it.hasNext() )
   {
    VoteItem vi = (VoteItem)it.next();
    data.addValue( vi.getVotenum(), "选项", vi.getTitle() );
   }


   // 判断是否为普通柱状图
   if( .... )
   {
    chart = ChartFactory.createBarChart( vote.getTitle(),
     "选项", "数量", data, PlotOrientation.VERTICAL,
     false, false, false );
   }
   else // 3D柱状图
   {
    chart = ChartFactory.createBarChart3D( vote.getTitle(),
      "选项", "数量", data, PlotOrientation.VERTICAL,
      false, false, false );
   }
  }
  return chart;
 }
}



使用 JFreeChart来创建基于web的图表

WWW的发展使得基于因特网的应用程序不再局限于静态或者简单的动态内容提供。传统的一些以软件包形式发布应用程序例如报表系统等都在逐渐搬到因特网上。但是这两者之间有着天壤之别,虽然对于数据获取、业务处理等方面基本类似,但是最大的差别在于用户界面。为了能在web浏览器上显示要求用户界面使用HTML以及图片的方式来展现数据,而传统的一些利用操作系统本身的控件来开发的用户界面无法适应琳琅满目的客户端,因此在这里也变得无能为力。回到本文的题目上来,为了创建一个可以在web浏览器上查看到图表一般有两种做法:第一种就是使用applet利用java本身对图形的支持来显示一个图表;第二种就是直接在web服务器端生成好图表图片文件后发送给浏览器。第一种方式显然对于客户端要求太高,随着现在主流浏览器放弃对JAVA的支持后,这种方式只适合一些局域网的应用,而对于因特网的环境就显得不太适合。因此我们下面将介绍一个JAVA的图表引擎JFreeChart用来产生基于WEB的图表。
JFreeChart项目简介
JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。为了减少篇幅本文主要介绍前面三种类型的图表,读者可以触类旁通去开发其他样式的图表。下面几个是JFreeChart产生的这三种类型图表的结果: 图1 图2 图3
上面的三个图都是表示四个季度的某个产品的销量信息。在继续下面小节之前必须先准备好开发环境,因为是基于WEB浏览器的图表展现,因此需要一个Servlet引擎或者是J2EE应用服务器(例如WebSphere,Tomcat等)。WEB环境的搭建就不累赘了,读者根据喜好自行安装。JFreeChart引擎本身需要到SourceForge.net上下载,地址如下:
JFreeChart主页:
http://www.jfree.org/jfreechart/index.html
JFreeChart下载页面:
http://sourceforge.net/projects/jfreechart/


下载的时候需要注意的是必须下载两个文件:JFreeChart以及Jcommon。目前最新配套版本是:JFreeChart 0.9.11 Jcommon 0.8.6
这里有点笔者在开发中遇见的问题需要注意的是:在使用Eclipse开发的时候会报一个莫名其妙的错误,错误可能指向某个类文件的第一行。遇到这样的问题一般是因为没有把Jcommon的jar包设置到项目的类路径中的缘故。具体的原因不祥。
回页首
解读JFreeChart的源码结构
在开始使用JFreeChart之前我们有必要先大概了解一下JFreeChart本身的结构以及它所带一些例子程序,这样有助于我们下一步自行开发。下载JFreeChart包后已经带有非常丰富的例子,因为JFreeChart这个项目本身的使用文档非常少,因此学习它最好的办法就是学习它所带的例子源码。在包org.jfree.chart.demo中有几十个文件用于展示JFreeChart所能支持的所有图表的结果。如果你的JDK是比较新的情况下可能在运行这些例子时会有问题,现象如下:
java.lang.UnsatisfiedLinkError: initDDraw
at sun.awt.windows.Win32OffScreenSurfaceData.initDDraw(Native Method)
at sun.awt.windows.Win32OffScreenSurfaceData.(Win32OffScreenSurfaceData.java:141)
at sun.awt.Win32GraphicsDevice.(Win32GraphicsDevice.java:58)
at sun.awt.Win32GraphicsEnvironment.makeScreenDevice(Win32GraphicsEnvironment.java:168)
at sun.java2d.SunGraphicsEnvironment.getScreenDevices(SunGraphicsEnvironment.java:240)
at sun.awt.Win32GraphicsEnvironment.getDefaultScreenDevice(Win32GraphicsEnvironment.java:61)
at java.awt.Window.init(Window.java:224)
at java.awt.Window.(Window.java:268)
at java.awt.Frame.(Frame.java:398)
at javax.swing.JFrame.(JFrame.java:198)
at org.jfree.chart.demo.JFreeChartDemo.(JFreeChartDemo.java:148)
at org.jfree.chart.demo.JFreeChartDemo.main(JFreeChartDemo.java:285)
Exception in thread "main"
这个错误是由于新版的Swing大量的使用了微软的DirectDraw的技术来提高画图的性能,而可能你的显卡在这时候会跟你闹点情绪或者显卡本身并不支持这样的一个技术。难道就没有办法了嘛?要解决这个问题也非常简单,我们可以屏蔽掉DirectDraw,不让Swing使用该技术就可以了。在运行这些代码时给虚拟机指定参数-Dsun.java2d.noddraw即可。
这时可能你又该纳闷了,不说是基于Web的图表嘛,怎么又扯到Swing上了?这是因为为了使开发者容易上手,无需配置任何运行环境,所以这些例子都是基于GUI方式的用于展现给开发者如果生成一个图表,我们要学习的也就是如何利用这个引擎生成图表而不是怎么来显示一个图表。当我们把生成的图表对象Export到一个图像文件即可在Web上发布。
下面我们来介绍JFreeChart中几个核心的对象类:
类名
类的作用以及简单描述
JFreeChart
图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象
XXXXXDataset
数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类
XXXXXPlot
图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持
XXXXXAxis
用于处理图表的两个轴:纵轴和横轴
XXXXXRenderer
负责如何显示一个图表对象
XXXXXURLGenerator
用于生成Web图表中每个项目的鼠标点击链接
XXXXXToolTipGenerator
用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类
基本上我认为JFreeChart项目本身的类结构的设计并不是很好,首先在创建图表的时候用到了大量的工厂方法,这样做虽然可以简化创建图表对象的代码,但是对项目本身或者开发人员来讲自行扩展一种新的图表都仍然是一件很麻烦的事情;其次除图表对象本身外其余的类过于复杂,使用者必须去了解每个类型的图表对象应该对应哪些Axis、Plot、Renderer类,并且必须非常熟悉这些类的构造函数中每个参数的具体含义。这些问题都大大困扰很多初学者。不过,虽然存在很多问题,但是JFreeChart本身仍不失为一个非常优秀的图表引擎,况且项目本身也在逐渐的发展中。
在非常简略的介绍了JFreeChart本身的代码结构后,下面我们开始动手试验几个常用的图表并把他们放到web上。
回页首
使用JFreeChart生成各种样式的图表
限于篇幅的问题我们在这里只实现两种常用的图表,其他类型图表读者可以触类旁通。我们先给出柱状图的实现,饼图的实现再来跟柱状图进行比较。
1 柱状图
package lius.chart.demo;
import java.io.*;
import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
/**
* 该类用于演示最简单的柱状图生成
* @author Winter Lau
*/
public class BarChartDemo {
public static void main(String[] args) throws IOException{
CategoryDataset dataset = getDataSet2();
JFreeChart chart = ChartFactory.createBarChart3D(
"水果产量图", // 图表标题
"水果", // 目录轴的显示标签
"产量", // 数值轴的显示标签
dataset, // 数据集
PlotOrientation.VERTICAL, // 图表方向:水平、垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);

FileOutputStream fos_jpg = null;
try {
fos_jpg = new FileOutputStream("D:\\fruit.jpg");
ChartUtilities.writeChartAsJPEG(fos_jpg,100,chart,400,300,null);
} finally {
try {
fos_jpg.close();
} catch (Exception e) {}
}
}
/**
* 获取一个演示用的简单数据集对象
* @return
*/
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, null, "苹果");
dataset.addValue(200, null, "梨子");
dataset.addValue(300, null, "葡萄");
dataset.addValue(400, null, "香蕉");
dataset.addValue(500, null, "荔枝");
return dataset;
}
/**
* 获取一个演示用的组合数据集对象
* @return
*/
private static CategoryDataset getDataSet2() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(100, "北京", "苹果");
dataset.addValue(100, "上海", "苹果");
dataset.addValue(100, "广州", "苹果");
dataset.addValue(200, "北京", "梨子");
dataset.addValue(200, "上海", "梨子");
dataset.addValue(200, "广州", "梨子");
dataset.addValue(300, "北京", "葡萄");
dataset.addValue(300, "上海", "葡萄");
dataset.addValue(300, "广州", "葡萄");
dataset.addValue(400, "北京", "香蕉");
dataset.addValue(400, "上海", "香蕉");
dataset.addValue(400, "广州", "香蕉");
dataset.addValue(500, "北京", "荔枝");
dataset.addValue(500, "上海", "荔枝");
dataset.addValue(500, "广州", "荔枝");
return dataset;
}
}
程序运行结束后生成的图片文件效果如下图所示:图4
如果是使用简单的数据即使用getDataSet方法获取数据集时产生的图片文件如下:图5
2 饼图
对于饼图而言,数据集的获取用的不是同一个数据集类,另外饼图不支持同一个类别的项目中还有子项目这样的数据。我们只给出创建饼图的代码,至于写图表到一个文件则与柱状图一致,无需重复。
package lius.chart.demo;
import java.io.*;
import org.jfree.data.*;
import org.jfree.chart.*;
/**
* 用于演示饼图的生成
* @author Winter Lau
*/
public class PieChartDemo {
public static void main(String[] args) throws IOException{
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPie3DChart("水果产量图", // 图表标题
data,
true, // 是否显示图例
false,
false
);
//写图表对象到文件,参照柱状图生成源码
}
/**
* 获取一个演示用的简单数据集对象
* @return
*/
private static DefaultPieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("苹果",100);
dataset.setValue("梨子",200);
dataset.setValue("葡萄",300);
dataset.setValue("香蕉",400);
dataset.setValue("荔枝",500);
return dataset;
}
}
生成的饼图文件效果如下: 图6
回页首
将生成的图表移到浏览器上
为了将生成的图表直接传给客户端浏览器,只需要将前面两个例子中的文件流换成是通过HttpServletResponse对象获取到的输出流,详细代码清单如下:
package lius.chart.demo;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import org.jfree.data.*;
import org.jfree.chart.*;
/**
* 演示通过servlet直接输出图表
* @author Winter Lau
*/
public class ChartDemoServlet extends HttpServlet {
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException
{
res.setContentType("image/jpeg");
DefaultPieDataset data = getDataSet();
JFreeChart chart = ChartFactory.createPie3DChart("水果产量图",
data,
true,
false,
false
);

ChartUtilities.writeChartAsJPEG(res.getOutputStream(),
100,chart,400,300,null);
}
/**
* 获取一个演示用的简单数据集对象
* @return
*/
private static DefaultPieDataset getDataSet() {
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("苹果",100);
dataset.setValue("梨子",200);
dataset.setValue("葡萄",300);
dataset.setValue("香蕉",400);
dataset.setValue("荔枝",500);
return dataset;
}
}
回页首
高级主题
很多情况我们不仅仅要求可以在浏览器上显示一个图表,我们更需要客户可以直接在图表上做一下交互的操作,例如获取信息提示,点击图表某个部分进行更详细信息的展示等等。例如前面生成的简单柱状图,用户需要在看到柱状图后点击某种水果例如是苹果即可看到各个地区苹果产量的情况。为此就要求该图形具有交互操作的功能。在HTML中为了让一个图像具有可交互的功能就必须给该图像定义一个Map对象。下表节选一段具有该功能的HTML代码

onclick="javascript:clickChart('100');return false;">
onclick="javascript: clickChart ('200');return false;">
onclick="javascript: clickChart ('300');return false;">
onclick="javascript: clickChart ('400');return false;">


由此就产生了一个问题:如果根据一个图像来生成对应的MAP对象。我们回头看看刚才的代码,在创建一个图表对象时候有两个参数,我们举柱状图的例子来讲这两个参数就是ChartFactory. createBarChart3D方法中的最后两个参数,这两个参数的类型都是布尔值。这两个参数意思分别是:是否创建工具提示(tooltip)以及是否生成URL。这两个参数分别对应着MAP中一个AREA的title属性以及href属性。
可是我想知道的是怎么来产生这个MAP啊!哈哈,不要着急,JFreeChart已经帮我们做好生成MAP对象的功能。为了生成MAP对象就要引入另外一个对象:ChartRenderingInfo。因为JFreeChart没有直接的方法利用一个图表对象直接生成MAP数据,它需要一个中间对象来过渡,这个对象就是ChartRenderingInfo。下图是生成MAP数据的流程图: 图7
如上图所示,ChartUtilities类是整个流程的核心,它周围的对象都是一些例如数据对象或者是文件等。这个流程简单描述如下:首先创建一个ChartRenderingInfo对象并在调用ChartUtilities的writeChartAsJPEG时作为最后一个参数传递进去。调用该方法结束后将产生一个图像文件以及一个填充好MAP数据的ChartRenderingInfo对象,有了这个对象我们还是没有办法获取具体的MAP数据,我们还必须借助于ChartUtilities的writeImageMap方法来将ChartRenderingInfo对象读取出来,获取MAP数据的代码片断如下:
PrintWriter w = null;
FileOutputStream fos_jpg = null;
FileOutputStream fos_cri = null;
try{
//根据不同类型的图表使用不同类,以下是针对饼图的操作
PiePlot plot = (PiePlot) chart.getPlot();
plot.setURLGenerator(new StandardPieURLGenerator(url));
//设置工具提示
plot.setToolTipGenerator(new StandardPieToolTipGenerator());
fos_jpg = new FileOutputStream(“d:\\fruit.jpg”);
ChartUtilities.writeChartAsJPEG(
fos_jpg,
100,
chart,
400,
300,
info);
fos_cri = new FileOutputStream(__d:\\fruit.map__);
w = new PrintWriter(fos_cri);
ChartUtilities.writeImageMap(w, __mapname__, info);
w.flush();
}finally{
try{
w.close();
}catch(Exception e){}
try{
fos_cri.close();
}catch(Exception e){}
try{
fos_jpg.close();
}catch(Exception e){}
}
打开文件D:\fruit.map,文件的内容就是要写到页面上的MAP数据。把生成的图像文件以及MAP数据文件写到页面上即可完成热点图表的功能。至于怎么结合两者之间的关系例如图像的useMap属性值必须与MAP对象的名称结合起来,必须根据实际的应用情况进行相应的处理。笔者建议把二者通过标签库封装起来,图像文件的名称以及MAP对象的名称由标签库统一进行控制,这样可以保证二者的一致性。
参考资料
JFreeChart图表引擎首页
Cewolf自定义图表标签库
关于作者
刘冬,他已经不再叫凤梨罐头了。珠海市创我科技发展有限公司软件工程师,主要从事在J2EE平台上实现商业智能(BI)方面的开发。 联系电话:0756-3377435-383 电子邮件: winter.lau@163.com

学习在Java中使用嵌入式数据库Derby

数据库做为数据持久化存储的重要手段怎么强度都不过分,但传统的数据库都比较庞大,需要安装配置等,对于一些比较轻量级的应用来说有点象杀鸡用牛刀一样.

Derby做为一个开源的、纯Java数据库引起了越来越多的关注,它源自IBM的CloudScape,现在成了大名鼎鼎的Apache基金会的开源项目。Apache一项是开源项目的领导者,从他们手里出去的东西都很不错,在此感谢一下这些无私奉献的人们。

Derby做为嵌入式数据库的一个方便之处就是对数据库的一切操控都可以在Java程序代码中实现,并且它非常的小,几个jar文件总共才2M多,非常轻巧,非常便于我们程序的移植。下面说一步步的来说明一下怎样使用。

首先,从http://db.apache.org/derby/下载Derby的最新版本,直接解压到本地,然后设置程序运行的环境变量。
在win2000/xp中“我的电脑”--》右键--》属性--》环境变量--》变量--》添加
1.设置JAVA_HOME
2.设置DERBY_INSTALL(一定要是这个名字,否则可能无法正常运行),值为解压的目录
环境变量设置好了之后,我们就可以着手写第一个测试程序了。

和使用其它的数据库一样,首先加载数据库驱动:
Class.forName("org.apachy.derby.jdbc.EmbeddedDriver");
然后我们创建一个数据库:
Connection conn=DriverManager.getConnection("jdbc.derby.derbyDB;create=true","user","pwd");
在上面的Url中指定create=true,则创建一个新的数据库。

得到连接之后,我们就可以象访问其它数据库一样,进行相关操作了。

Statement st=conn.createStatement();
st.execute("create table test1(id int,name varchar(20));
st.execute("insert into test1 values(1,'sinboy')");
st.execute("inert into test1 values(2,'Tom')");
ResultSet rs=st.executeQuery("select * from test1");
while(rs.next){
System.out.println("id:"+rs.getInt(1)+" name:"+rs.getString(2));
}
rs.close();
st.close();
conn.commit();
conn.close();


Derby的最大好处应该还是小巧、纯Java、好移植,比较适全小量的数据存储。