关于作者

用户名:pegasus827
笔名:pegasus827
地区: 湖南-长沙
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



公益事业

便民广告

访问统计:
文章个数:1023
评论个数:444
留言条数:89




Powered by BlogDriver 2.1

灵感的海

 

QQ 285038777 事在人为

文章

网络收藏夹营养套餐1  (作者置顶)

营养套餐

引擎套餐

http://delicious.com/ylonglew/


新闻套餐

http://ckxx.org.cn/   参考消息 电子版

http://economy.enorth.com.cn/tjjj/ 北方网

http://www.ce.cn/ 中国经济网

www.qq.com


http://zh.wikipedia.org/wiki/%E9%A6%96%E9%A1%B5 维基


英语听力套餐

http://www.tingroom.com/about/42875.html 慢速VOA

http://www.ebigear.com/

http://www.putclub.com/

http://video.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=8&word=%D3%A2%CE%C4%D7%D6%C4%BB


英语学习套餐

http://www.britannica.com/ 大英百科

www.chinadaily.com

http://www.msn.com

http://online.wsj.com/public/us    华尔街日报

http://www.hao123.com/worldzh.htm

http://www.qkankan.com/

www.youtube.com

英语交流套餐

http://www.perspectives.com/

日语套餐

http://www.jpwords.cn/ 在线背日语


http://www.mercearia.com.br

http://jp.hjenglish.com/ 沪江日语

http://www.jpwind.com/studyol/ 和风日语

http://www.kekejp.com/ 可可日语


网管套餐

相当不错的论坛 ixpub http://www.ixpub.net/ 

瑞星论坛 http://bbs.ikaka.com/

中国网管联盟 http://www.bitscn.com/

中国安全信息网 http://www.hacker.cn

中国it实验室 http://cisco.chinaitlab.com/List_141.html

最新病毒资讯  http://www.yuxinqin.cn/smallrascal/

病毒资讯 电脑软硬件网 http://www.45it.com/Article/pcedu/Safety/Index.htm

中国信息安全网  http://www.infosecurity.org.cn/


娱乐套餐

http://lengxiaohua.net 冷笑话

http://jiwai.de/lengxiaohua/

http://www.my7475.com 奇人奇事

http://minifun.cn/ 微趣

http://www.moodeng.cn   摩登志

http://kisshi.com 河蟹

http://www.tianya.cn/ 天涯社区

http://www.u148.net/ 有意思

http://popask.cn 智力问答

- 作者: pegasus827 2009年01月2日, 星期五 14:16  回复(4) |  引用(0) 加入博采

灵感的海非正式网络慈善公益活动  (作者置顶)

 活动名称:   灵感的海-----非正式网络慈善公益活动

活动内容:   

      依靠在本Blog上发Google广告的方式挣钱。

      欢迎来访的游客朋友能多花一点点时间点击。

       如果我能收到Google寄来的广告收入支票,我决定将广告收入的10%捐给希望工程或慈善事业,到时候将捐赠获得的相关证明照片上传。

活动声明: 

      本活动为个人发起,仅以本Blog信誉作为担保。

      本活动为非正式活动,参与本次活动者纯属自愿。如有问题,概不负责。

      本活动最终解释权归本Blog所有。                                         

 动动手指,献出一份爱心!

- 作者: pegasus827 2007年03月26日, 星期一 22:39  回复(12) |  引用(0) 加入博采

个人网络收藏夹  (作者置顶)
摘要:个人网络收藏夹 查看全文

- 作者: pegasus827 2006年01月19日, 星期四 14:18  回复(14) |  引用(0) 加入博采

博客搬迁,分舵已经成立一年

由于访问速度原因,已经于1年前将博客迁到blog.sina.com.cn/pegasus827/

希望关注的朋友继续关注。

一年来发生的太多事情,甜蜜的爱情与刻毒的谎言,在大喜大悲中蹒跚着步履。

身上的锐气尚未磨灭,一切一定都可以从头开始。

- 作者: pegasus827 2010年04月13日, 星期二 14:44  回复(0) |  引用(0) 加入博采

小白连接池javabean和访问经验心得


修正了其中不完善的地方.


1.配置数据源 这部分好说

JNDI Name: ljch
Data Source URL: jdbc:mysql://localhost:3306/lianjiechi
JDBC Driver Class: org.gjt.mm.mysql.Driver
User Name: root
Password: ********
Max. Active Connections: 4
Max. Idle Connections: 2
Max. Wait for Connection: 500
Validation Query:

名字我改成自己的,通常都写jdbc/xxxx,但这个jdbc是可以省的,只不过是规范的命名, 数据源通常是mysql默认的3306口再接数据库名

2.%TOMCAT_HOME%\conf,打开web.xml 这个文件配置看教程就可以

通过文件夹导航到%TOMCAT_HOME%\conf,打开web.xml,在〈/web-app〉的前面添加以下内容:

〈resource-ref〉
〈description〉DB Connection〈/description〉
〈res-ref-name〉ljch〈/res-ref-name〉
〈res-type〉javax.sql.DataSource〈/res-type〉
〈res-auth〉Container〈/res-auth〉
〈/resource-ref〉

其中res-ref-name 一定要和配置的连接池JNDI Name一致,区分大小写。

小白:

Tomcat配置JNDI Name的地方、这个地方%TOMCAT_HOME%\conf、%TOMCAT_HOME%\conf\Catalina\localhost、网页里访问池的地方

一共四个地方涉及JNDI Name,一定都要一致

不然会报Name jdbc is not bound in this Context错误。


3. %TOMCAT_HOME%\conf\Catalina\localhost 实际上找不到与网站文件夹名对应的xml

需要自己做一个

lianjiechi.xml

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="lianjiechi" path="/lianjiechi" workDir="work\Catalina\localhost\lianjiechi">
<ResourceLink
    global="ljch"
    name="ljch"
    type="javax.sql.DataSourcer"/>
</Context>

其中ResourceLink是和配置的池名字对应的.

这样算是配置好了.

4. 连接mysql数据库的jar驱动文件,通常放到web-inf下的lib里不管用,常报

Cannot load JDBC driver class 'com.mysql.jdbc.Driver'错误

所以要拷到 commom/lib里才能生效。

附小白写的连接池javabean


package pegasus;
import java.io.PrintStream;
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
//import java.util.*;
//import java.io.*;
//import java.text.*;
public class dbchicontrol {
DataSource ds=null;
Connection conn = null;
Statement stmt=null;
ResultSet rs = null;
public dbchicontrol(){
try{
InitialContext ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/ljch");
//加载连接池
     }
catch(Exception e) {
System.err.println("MySQLconn(): "+e.getMessage());
                                          }
                }
public ResultSet executeQuery(String sql){
//以记录集为返回值的函数
rs = null;
try {
conn = ds.getConnection();
stmt = conn.createStatement();
//与DBMS建立链接
rs = stmt.executeQuery(sql);
return rs;
}
catch(SQLException ex) {
System.err.println("aq.executeQuery:"+ex.getMessage());
return rs;     //也得有个返回
                       }
}

public void executeUpdate(String sql){
try{
  conn = ds.getConnection();
  stmt = conn.createStatement();
//与DBMS建立链接
  stmt.executeUpdate(sql);
 }
catch(SQLException em) {
System.err.println("aq.executeQuery:"+em.getMessage());
                       } 
 
}


public void closeDB(){
          try{
            if(rs!=null)
            rs.close();
            if(stmt!=null)
            stmt.close();
            if(conn!=null)
            conn.close();
                }
         catch(Exception ex) {
          System.err.println("aq.executeQuery:"+ex.getMessage());
                                 }             
                     }

}

小白:javax.sql.*和DataSource有关,javax.naming.*和InitialContext有关,所以要声明导入


- 作者: pegasus827 2009年02月23日, 星期一 16:38  回复(0) |  引用(0) 加入博采

林语堂语录

中国就有这么一群奇怪的人, 本身是最底阶层, 利益每天都在被损害,却具有统治阶级的意识. 在动物世界里找这么弱智的东西都几乎不可能。

无证据证明是林语堂说的 , 可能是未在大陆发行的 一夕话

林语堂(1895.10.10-1976.3.26)福建龙溪(现福建漳州)人。原名和乐,后改玉堂,又改语堂。笔名毛驴、宰予、岂青等,中国现当代著名学者,文学家,语言学家。

1912年林语堂入上海圣约翰大学,毕业后在清华大学任教。1919年秋赴美哈佛大学文学系。1922年获文学硕士学位。同年转赴德国莱比锡大学,专攻语言学。1923年获博士学位后回国,任北京大学教授、北京女子师范大学教务长和英文系主任。1924年后为《语丝》主要撰稿人之一。1926年到厦门大学任文学院长写杂文,并研究语言。1927年任外交部秘书。1932年主编《论语》半月刊。1934年创办《人间世》,1935年创办《宇宙风》,提倡“以自我为中心,以闲适为格凋”的小品文,成为论语派主要人物。1935年后,在美国用英文写《吾国与吾民》《风声鹤唳》, 在法国写《京华烟云》等文化著作和长篇小说

  1944年曾一度回国到重庆讲学。1945年赴新加坡筹建南洋大学,任校长。1947年任联合国教科文组织美术与文学主任。1952年在美国与人创办《天风》杂志。1966年定居台湾。1967年受聘为香港中文大学研究教授。1975年被推举为国际笔会副会长。1976年在香港逝世。

两脚踏东西文化

  一心评宇宙文章──《我的话》

  彻悟与痛苦

  一个人彻悟的程度,恰等于他所受痛苦的深度。──《吾国吾民》

  稀罕

  人类之足引以自傲者总是极为稀少,而这个世界上所能予人生以满足者亦属罕有。──《吾国吾民》

  倘无幽默

  没有幽默滋润的国民,其文化必日趋虚伪,生活必日趋欺诈,思想必日趋迂腐,文学必日趋干枯,而人的心灵必日趋顽固。──《一夕话》

  倘无女子

  没有女子的世界,必定没有礼俗、宗教、传统及社会阶级。世上没的天性守礼的男子,也没的天性不守礼的女子。假定没有女人,我们必不会居住千篇一律的弄堂,而必住在三角门窗八角澡盆的房屋,而且也不知饭厅与卧室之区别,有何意义。男子喜欢在卧室吃饭,在饭厅安眠的。──《金圣叹之生理学》

  人之渺小

  人生在宇宙中之渺小,表现得正像中国的山水画。在山水画里,山水的细微处不易看出,因为已消失在水天的空白中,这时两个微小的人物,坐在月光下闪亮的江流上的小舟里。由那一刹那起,读者就失落在那种气氛中了。

  ──《苏东坡传》

  悠闲的情绪

  享受悠闲生活当然比享受奢侈生活便宜得多。要享受悠闲的生活只要一种艺术家的性情,在一种全然悠闲的情绪中,去消遣一个闲暇无事的下午。──《生活的艺术

  快乐哲学

  只有快乐的哲学,才是真正深湛的哲学;西方那些严肃的哲学理论,我想还不曾开始了解人生的真义哩。在我看来,哲学的唯一效用是叫我们对人生抱一种比一般商人较轻松较快乐的态度。──《生活的艺术》

  笔和锥

  作家的笔正如鞋匠的锥,越用越锐利,到后来竟可以尖如缝衣之针。但他的观念的范围则必日渐广博,犹如一个人的登山观景,爬得越高,所望见者越远。──《生活的艺术》

  与古人面谈

  一本古书使读者在心灵上和长眠已久的古人如相面对,当他读下去时,他便会想象到这位古作家是怎样的形态和怎样的一种人,孟子和大史家司马迁都表示这个意见。──《生活的艺术》

  警醒迟钝

  艺术应该是一种讽刺文学,对我们麻木了的情感、死气沉沉的思想,和不自然的生活下的一种警告。它教我们在矫饰的世界里保持着朴实真挚。──《生活的艺术》

  可怜的世界

  ……如果我们在世界里有了知识而不能了解,有了批评而不能欣赏,有了美而没有爱,有了真理而缺少热情,有了公义而缺乏慈悲,有了礼貌而一无温暖的心,这种世界将成为一个多么可怜的世界啊!──《生活的艺术》

  最美的时候

  一个女子最美丽的时候是在她立在摇篮的面前的时候;最恳切最庄严的时候是在她怀抱婴儿或搀着四五岁小孩行走的时候;最快乐的时候则如我所看见的一幅西洋画像中一般,是在拥抱一个婴儿睡在枕上逗弄的时候。──《生活的艺术》

  乘船的旅客

  人生真是一场梦,人类活像一个旅客,乘在船上,沿着永恒的时间之河驶去。在某一地方上船,在另一个地方上岸,好让其他河边等候上船的旅客。──《生活的艺术》

  热情加智勇

  人生是残酷的,一个有着热烈的、慷慨的、天性多情的人,也许容易受他的比较聪明的同伴之愚。那些天性慷慨的人,常常因慷慨而错了主意,常常因对付仇敌过于宽大,或对于朋友过于信任,而走了失着。……人生是严酷的,热烈的心性不足以应付环境,热情必须和智勇连结起来,方能避免环境的摧残。──《生活的艺术》

  死了三次

  凡是谈到真理的人,都反而损害了它;凡是企图证明它的人,都反而伤残歪曲了它;凡是替它加上一个标识和定出一个思想派别的人,都反而杀害了它:而凡是自称为信仰它的人,都埋葬了它。所以一个真理,等到被竖立成为一个系统时,它已死了三次,并被埋葬了三次了。──《生活的艺术》

  旷达的幽默家

  那些有能力的人、聪明的人、有野心的人、傲慢的人,同时,也就是最懦弱而糊涂的人,缺乏幽默家的勇气、深刻和机巧。他们永远在处理琐碎的事情。他们并不知那些心思较旷达的幽默家更能应付伟大的事情。──《生活的艺术》

  刻板

  一般人不能领略这个尘世生活的乐趣,那是因为他们不深爱人生,把生活弄得平凡、刻板,而无聊。──《生活的艺术》

  想做另一个人

  一位现代中国大学教授说过一句诙谐语:“老婆别人的好,文章自己的好。”在这种意义上说来,世间没有一个人会感到绝对的满足的。大家都想做另一个人,只要这另一个人不是他现在的现在。──《生活的艺术》

  老年之美

  古教堂、旧式家具、版子很老的字典以及古版的书籍,我们是喜欢的,但大多数的人忘却了老年人的美。这种美是值得我们欣赏,在生活是十分需要。我以为古老的东西,圆满的东西,饱经世变的东西才是最美的东西。──《生活的艺术》

  不近人情

  我所以反对独裁者,就因为他们不近人情。因为不近人情者总是不好的。不近人情的宗教不能算是宗教;不近人情的政治是愚笨的政治,不近人情的艺术是恶劣的艺术;而不近人情的生活也就是畜类式的生活。──《生活的艺术》

  旅行家

  一个真正的旅行家必是一个流浪者,经历着流浪者的快乐、诱惑,和探险意念。旅行必须流浪式,否则便不成其为旅行。旅行的要点在于无责任、无定时、无来往信札、无嚅嚅好问的邻人、无来客和无目的地。一个好的旅行家决不知道他往那里去,更好的甚至不知道从何处而来。他甚至忘却了自己的姓名。──《生活的艺术》

  蚕

  一个学者是像一只吐出所吃的食物以饲小鸟的老鹰;一个思想家则像一条蚕,他所吐的不是桑叶而是丝。──《生活的艺术》

  和土壤相亲

  让我和草木为友,和土壤相亲,我便已觉得心满意足。我的灵魂很舒服地在泥土里蠕动,觉得很快乐。当一个人优闲陶醉于土地上时,他的心灵似乎那么轻松,好像是在天堂一般。事实上,他那六尺之躯,何尝离开土壤一寸一分呢?──《生活的艺术》

  温饱黑甜

  我曾经说过,中国人对于快乐概念是“温暖、饱满、黑暗、甜蜜”──即指吃完一顿丰盛的晚餐上床去睡觉的情景。一个中国诗人也曾说:“肠满诚好事;余者皆奢侈。”──《生活的艺术》

  过客

  我们对于人生可以抱着比较轻快随便的态度:我们不是这个尘世的永久房客,而是过路的旅客。──《生活的艺术》

  美人鱼

  如果我自己可以自选做世界上作家之一的话,我颇愿做个安徒生。能够写美人鱼(The Mermaid)的故事,想着那女人鱼的思想,渴望着到了长大的时候到水面上来,那真是人类所感到的最深沉最美妙的快乐了。──《生活的艺术》

- 作者: pegasus827 2009年02月23日, 星期一 14:44  回复(0) |  引用(0) 加入博采

瑞杰认证问题总结

1. 地址获取问题  ipconfig/release  ipconfig/renew

2. 上线一阵被踢  把无线网卡等其他网卡禁用

3.  把上联hub 交换机重启

- 作者: pegasus827 2009年02月18日, 星期三 15:00  回复(0) |  引用(0) 加入博采

串口光驱(SATA)如何做GHOST

1、 一个SATA硬盘挂在SATA1接口,一个CDROM挂在PRIMARY IDE接口(设为主盘):
1)开机进入BIOS设定,在MAIN菜单中选中IDE Configuration
2)将Onboard IDE Operate Mode改为
Compatible Mode
3)在[Enhanced Mode Support On]中选择
[Primary P-ATA+S-ATA]
4) 重启进入BIOS后,你会发现在MAIN菜单中只有4IDE设备了,[Primary IDE MASTER][CDROM] [Primary IDE Slave][NONE][Secondary IDE Master][IDE DISK](你的硬盘的型号), [[Secondary IDE Slave]
[NONE]
5)用光盘启动进入DOS后,运行GHOST就可以了

2、 一个SATA硬盘挂在SATA1接口,一个CDROM挂在SECONDARY IDE接口: 只要将上面第三步中的[Primary P-ATA+S-ATA]改为[Secondary P-ATA+S-ATA],就可以了,此时系统会将 SATA1SATA2设备当作[Primary IDE Master][Primary IDE Slave]

3、 如果你使用了支持SATA的主板,但没有使用SATA设备时,有些主板BIOS还是默认打开了SATA通道的,此时要使用GHOST来备份系统也会导致黑屏,所以我们也需要在BIOS里面设置一下,来屏蔽掉SATA通道,还是在第一种情况下的第三步中,将[Primary P-ATA+S-ATA]改为[P-ATA Ports Only],此时系统将屏蔽掉SATA设备,你可以将它做为普通的没有SATA设备的主板使用了。

另外一种方法是对Ghost软件做带命令执行。

1)选择Ghost8.3以上版本的ghost

2)将你的Ghost软件拷贝到你在DOS下能访问的其他盘,

3)在DOS下执行ghost命令时,加上 -noide参数就可以,
   
假设你的ghost放在X盘根目录下,命令格式: X\GHOST.EXE -noide 回车就能启动Ghost
解释:Ghost在启动的时候会自动检测本机上的硬盘接口,所以使用SATA硬盘的电脑在启动ghost的时候会给IDE的接口发出指令,如果该电脑上有IDE硬盘则返回,如无则一直不能得到回应,便一直处于等待状态。故而死机。于上所讲硬盘是SATA(窜口)硬盘的机器,如果不屏蔽掉IDE接口,ghost就找不到硬盘。

    还有一种方法就是从光盘启动PE操作系统,进入系统后使用Ghost32.exe进行恢复系统。

一些光盘还原软件需要高版本才能支持串口

- 作者: pegasus827 2009年02月18日, 星期三 09:39  回复(0) |  引用(0) 加入博采

JXL下载excel表格途径 收集

一种是定义了链接从服务器上直接下

定义一个专门放EXCEL的目录 用链接就直接下了,,,,
String path = "C://Program Files//Apache Software Foundation//Tomcat 5.5//webapps//test//excelfile//test.xls";
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(path));

也可

给你一段代码:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

byte[] exportData = (byte[])request.getAttribute("exportData");
String fileName = (String) request.getAttribute("fileName");
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ fileName + ".xls");
ServletOutputStream ouputStream = response.getOutputStream();
ouputStream.write(exportData);
ouputStream.flush();
ouputStream.close();
exportData = null;
}
把exportData是需要导出的数据!


楼上正解,找到一方法,和你的差不多。

    response.reset();
response.setCharacterEncoding("ISO8859-1");
response.setHeader("Content-Disposition", "attachment;  filename="
+ new String(fileChName.getBytes("GBK"), "ISO8859-1"));//fileChName为下载时用户看到的文件名
response.setHeader("Connection", "close");
response.setHeader("Content-Type", "application/octet-stream");

OutputStream out = response.getOutputStream();


把你的WritableWorkbook book = Workbook.createWorkbook(new File("测试.xls")); 这句
换为
Workbook.createWorkbook(out);
返回的jsp页面,是个空页面即可。。action像平常一样做跳转就行了。
根本不用生成到硬盘上,生成到内存你,直接就可以下载了

- 作者: pegasus827 2009年02月17日, 星期二 10:19  回复(0) |  引用(0) 加入博采

java报表JXL和POI打印设置 转载

在最近的项目中几乎全都是报表,而在web报表中使用的fomula 1控件却无法使用Excel本来设置好的打印属性,故对常用的报表打印属性进行了总结。

PS:百度+google了很久也很没找到像样的java报表打印资料,将这些总结特此分享,欢迎转载

JXL的打印设置jxl.SheetSettings这个类中,我们可以通过方SheetWritableSheet#getSettings()获取

 

1.

1.1

SheetSetting#setOrientation(PageOrientation po)

参数  PageOrientation#LANDSCAPE       横向打

PageOrientation# PORTRAIT       纵向打

1.2

1.2.1缩放比(A) SheetSetting #setScaleFactor (int);百分比形

1.2.2(F)

 SheetSetting #setFitWidth(int);

 SheetSetting #setFitHeight(int);

1.3纸张大(Z) SheetSetting #setPaperSize (PaperSize);

纸张大小的定义说明参PaperSize类中的常量

1.4起始页(R) SheetSetting #setPageStrart(int);[默认状]

 

2页面

2.1(T) SheetSetting # setTopMargin (double);

2.2(B) SheetSetting # setBottomMargin (double);

2.3(L) SheetSetting # setLeftMargin (double);

2.4(R) SheetSetting # setRightMargin (double);

2.5(A) SheetSetting #setHeaderMargin(double);

2.6(F) SheetSetting #setFooterMargin(double);

2.7居中方

2.7.1(Z) SheetSetting # setHorizontalCentre (boolean);

2.7.2(V) SheetSetting #setVerticallyCenter(boolean);

 

3/

3.1SheetSetting # setHeaderHeaderFooter;

:

HeaderFooter的设置,首先确定页眉的位置(左、中、右),通HeaderFooter#getCentre()(或getLeft()getRight())方法获HeaderFooter.Contents类,之后对这个类的属性进行操作

下面简单介绍几个常用方法

设置字号Contents#setFontSize(int)

设置字体Contents#setFontName(String)

设置内容Contents# appendString),还appendDate()当前日期等等,具体参Contents类说

3.2SheetSetting # setFooterHeaderFooter

说明同

 

4工作

4.1打印区

SheetSettings #setPrintArea(firstCol, firstRow, lastCol, lastRow)

 

4.2打印标

SheetSettings#setPrintTitles (firstRow,lastRow,firstCol,lastCol);

SheetSettings#setPrintTitlesCol(firstCol,lastCol)

SheetSettings#setPrintTitlesRow(firstRow,lastRow)

 

另有一些其他的设置可JXL API中找到,不多说了

 

附件:通常Excel中设置好打印,再将其读出来设置到当前页中来,附上代码

Java代码 复制代码
  1. //获取原Sheet页的设置    
  2.   
  3. SheetSettings sheetSetting=sheet.getSettings();    
  4.   
  5. //将原sheet页的打印设置设置到当前Sheet页中    
  6.   
  7. sheet=new MjJxlExcelCopyPrintSetting().copySheetSettingToSheet(sheet, sheetSetting);   
  8. 下面是MjJxlExcelCopyPrintSetting的代码:   
  9.   
  10. import jxl.HeaderFooter;    
  11. import jxl.Range;    
  12. import jxl.SheetSettings;    
  13. import jxl.format.PageOrientation;    
  14. import jxl.format.PaperSize;    
  15. import jxl.write.WritableSheet;    
  16.   
  17. /**   
  18.  * 读取Jxl方法并设置   
  19.  
  20.  * @author 邱大为   
  21.  * @version 1.0   
  22.  */    
  23. public class MjJxlExcelCopyPrintSetting {    
  24.     /**   
  25.      * 该方法将setting设置到sheet中   
  26.      * @param sheet 需要设置的sheet   
  27.      * @param setting 被设置的属性   
  28.      * @return   
  29.      */    
  30.     public WritableSheet copySheetSettingToSheet(WritableSheet sheet,SheetSettings setting){    
  31. //      设置原Sheet打印属性到新Sheet页    
  32.         SheetSettings sheetSettings= sheet.getSettings();    
  33.             
  34.         sheetSettings.setAutomaticFormulaCalculation(setting.getAutomaticFormulaCalculation());    
  35.         sheetSettings.setBottomMargin(setting.getBottomMargin());    
  36.         sheetSettings.setCopies(setting.getCopies());    
  37.         sheetSettings.setDefaultColumnWidth(setting.getDefaultColumnWidth());    
  38.         sheetSettings.setDefaultRowHeight(setting.getDefaultRowHeight());    
  39.         sheetSettings.setDisplayZeroValues(setting.getDisplayZeroValues());    
  40.         sheetSettings.setFitHeight(setting.getFitHeight());    
  41.         sheetSettings.setFitToPages(setting.getFitToPages());    
  42.         sheetSettings.setFitWidth(setting.getFitWidth());    
  43.             
  44.         HeaderFooter footer=setting.getFooter();    
  45.         if(footer!=null){    
  46.             sheetSettings.setFooter(footer);    
  47.         }    
  48.         sheetSettings.setFooterMargin(setting.getFooterMargin());    
  49.         HeaderFooter header=setting.getHeader();    
  50.         if(header!=null){    
  51.             sheetSettings.setHeader(header);    
  52.         }    
  53.         sheetSettings.setHeaderMargin(setting.getHeaderMargin());    
  54.         sheetSettings.setHidden(setting.isHidden());    
  55.         sheetSettings.setHorizontalCentre(setting.isHorizontalCentre());    
  56.         sheetSettings.setHorizontalFreeze(setting.getHorizontalFreeze());    
  57.         sheetSettings.setHorizontalPrintResolution(setting.getHorizontalPrintResolution());    
  58.         sheetSettings.setLeftMargin(setting.getLeftMargin());    
  59.         sheetSettings.setNormalMagnification(setting.getNormalMagnification());    
  60.         PageOrientation pageOrientation=setting.getOrientation();    
  61.         if(pageOrientation!=null){    
  62.             sheetSettings.setOrientation(pageOrientation);    
  63.         }    
  64.         sheetSettings.setPageBreakPreviewMagnification(setting.getPageBreakPreviewMagnification());    
  65.         sheetSettings.setPageBreakPreviewMode(setting.getPageBreakPreviewMode());    
  66.         sheetSettings.setPageStart(setting.getPageStart());    
  67.         PaperSize paperSize=setting.getPaperSize();    
  68.         if(paperSize!=null){    
  69.             sheetSettings.setPaperSize(setting.getPaperSize());    
  70.         }    
  71.             
  72.         sheetSettings.setPassword(setting.getPassword());    
  73.         sheetSettings.setPasswordHash(setting.getPasswordHash());    
  74.         Range printArea=setting.getPrintArea();    
  75.         if(printArea!=null){    
  76.             sheetSettings.setPrintArea(printArea.getTopLeft()==null?0:printArea.getTopLeft().getColumn(),     
  77.                     printArea.getTopLeft()==null?0:printArea.getTopLeft().getRow(),     
  78.                             printArea.getBottomRight()==null?0:printArea.getBottomRight().getColumn(),     
  79.                                     printArea.getBottomRight()==null?0:printArea.getBottomRight().getRow());    
  80.         }    
  81.             
  82.         sheetSettings.setPrintGridLines(setting.getPrintGridLines());    
  83.         sheetSettings.setPrintHeaders(setting.getPrintHeaders());    
  84.             
  85.         Range printTitlesCol=setting.getPrintTitlesCol();    
  86.         if(printTitlesCol!=null){    
  87.         sheetSettings.setPrintTitlesCol(printTitlesCol.getTopLeft()==null?0:printTitlesCol.getTopLeft().getColumn(),     
  88.                 printTitlesCol.getBottomRight()==null?0:printTitlesCol.getBottomRight().getColumn());    
  89.         }    
  90.         Range printTitlesRow=setting.getPrintTitlesRow();    
  91.         if(printTitlesRow!=null){    
  92.             sheetSettings.setPrintTitlesRow(printTitlesRow.getTopLeft()==null?0:printTitlesRow.getTopLeft().getRow(),     
  93.                     printTitlesRow.getBottomRight()==null?0:printTitlesRow.getBottomRight().getRow());    
  94.         }    
  95.             
  96.         sheetSettings.setProtected(setting.isProtected());    
  97.         sheetSettings.setRecalculateFormulasBeforeSave(setting.getRecalculateFormulasBeforeSave());    
  98.         sheetSettings.setRightMargin(setting.getRightMargin());    
  99.         sheetSettings.setScaleFactor(setting.getScaleFactor());    
  100.         sheetSettings.setSelected(setting.isSelected());    
  101.         sheetSettings.setShowGridLines(setting.getShowGridLines());    
  102.         sheetSettings.setTopMargin(setting.getTopMargin());    
  103.         sheetSettings.setVerticalCentre(setting.isVerticalCentre());    
  104.         sheetSettings.setVerticalFreeze(setting.getVerticalFreeze());    
  105.         sheetSettings.setVerticalPrintResolution(setting.getVerticalPrintResolution());    
  106.         sheetSettings.setZoomFactor(setting.getZoomFactor());    
  107.         return sheet;    
  108.     }    
  109. }   
 

  1. 关于POI的打印设置:

    转自http://bbs.club.sina.com.cn/tableforum/App/view.php?bbsid=343&subid=0&fid=5477&tbid=8182特此感

    1.
    1.
    1

    1.1.
    1
    (T)HSSFPrintSetup#setLandscape(false); [默认状]
    1.1.2
    (L)HSSFPrintSetup#setLandscape(true);

    1.2

    1.2.
    1
    缩放比(A)HSSFPrintSetup#setScale((short) 100);[默认状]
    1.2.2
    (F)
     HSSFPrintSetup#setFitWidth((short) 1);
     HSSFPrintSetup#setFitHeight((short) 0);

    1.3
    纸张(Z)HSSFPrintSetup#setPageSize(HSSFPrintSetup.LETTER_PAPERSIZE);
    纸张大小的定义说明
    public static final short LETTER_PAPERSIZE = 1;

    public static final short LEGAL_PAPERSIZE = 5;
    public static final short EXECUTIVE_PAPERSIZE = 7;
    public static final short A4_PAPERSIZE = 9;
    public static final short A5_PAPERSIZE = 11;
    public static final short ENVELOPE_10_PAPERSIZE = 20;
    public static final short ENVELOPE_DL_PAPERSIZE = 27;
    public static final short ENVELOPE_CS_PAPERSIZE = 28;
    public static final short ENVELOPE_MONARCH_PAPERSIZE = 37;

    1.4
    打印质(Q)HSSFPrintSetup#setVResolution((short) 300)
    1.5
    起始页(R)HSSFPrintSetup#setPageStrart((short) 0);[默认状]

    2
    页面
    2.
    1
    (T)HSSFSheet#setMargin(HSSFSheet.TopMargin,(short)0.6);
    2.2
    (B)HSSFSheet#setMargin(HSSFSheet.BottomMargin,(short)0.6);
    2.3
    (L)HSSFSheet#setMargin(HSSFSheet.LeftMargin,(short)0.6);
    2.4
    (R)HSSFSheet#setMargin(HSSFSheet.RightMargin,(short)0.2);
    2.5
    (A)HSSFPrintSetup#setHeaderMargin((double)0.2);
    2.6
    (F)HSSFPrintSetup#setFooterMargin((double)0.6);
    2.7
    居中方
    2.7.
    1
    (Z)HSSFSheet#setHorizontallyCenter(false);
    2.7.2
    (V)HSSFSheet#setVerticallyCenter(false);
    3/

转载自http://qiudawei115.javaeye.com/blog/241472

- 作者: pegasus827 2009年02月17日, 星期二 09:44  回复(0) |  引用(0) 加入博采

java的POI操作Excel文件(2)

现在我要做的东西基本完成啦,我把这段时间使用POI的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,至于POI基本的使用方法,自己去看文档吧。

1、设置分页符的bug

POI里的HSSFSheet类提供了setRowBreak方法可以设置Sheet的分页符。

Bug:如果你要设置分页符的Sheet是本来就有的,并且你没有在里面插入过分页符,那么调用setRowBreak时POI会抛出空指针的异常。

解决方法:在Excel里给这个sheet插入一个分页符,用POI打开后再把它删掉,然后你就可以随意插入分页符了。

如果sheet是由POI生成的则没有这个问题。我跟踪了setRowBreak的源代码,发现是Sheet.Java下的PageBreakRecord rowBreaks这个变量在搞鬼,如果Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new实例,所以只能我们先手工给Excel插入一个分页符来触发POI为rowBreaks创建实例。

2、如何拷贝行

我在gmane.org的POI用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写:

//注:this.fWorkbook是一个HSSHWorkbook,请自行在外部new
    public void copyRows
    (String pSourceSheetName,
    String pTargetSheetName,
    int pStartRow, int pEndRow,
    int pPosition)
    {
    HSSFRow sourceRow = null;
    HSSFRow targetRow = null;
    HSSFCell sourceCell = null;
    HSSFCell targetCell = null;
    HSSFSheet sourceSheet = null;
    HSSFSheet targetSheet = null;
    Region region = null;
    int cType;
    int i;
    short j;
    int targetRowFrom;
    int targetRowTo;
   
    if ((pStartRow == -1) || (pEndRow == -1))
    {
      return;
    }
    sourceSheet = this.fWorkbook.getSheet(pSourceSheetName);
    targetSheet = this.fWorkbook.getSheet(pTargetSheetName);
    //拷贝合并的单元格
    for (i = 0; i < sourceSheet.getNumMergedRegions(); i++)
    {
    region = sourceSheet.getMergedRegionAt(i);
    if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() <= pEndRow))
    {
    targetRowFrom = region.getRowFrom() - pStartRow + pPosition;
    targetRowTo = region.getRowTo() - pStartRow + pPosition;
    region.setRowFrom(targetRowFrom);
    region.setRowTo(targetRowTo);
    targetSheet.addMergedRegion(region);
    }
    }
    //设置列宽
    for (i = pStartRow; i <= pEndRow; i++)
    {
    sourceRow = sourceSheet.getRow(i);
    if (sourceRow != null)
    {
    for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++)
    {
    targetSheet.setColumnWidth(j, sourceSheet.getColumnWidth(j));
    }
    break;
    }
    }
    //拷贝行并填充数据
    for (;i <= pEndRow; i++)
    {
    sourceRow = sourceSheet.getRow(i);
    if (sourceRow == null)
    {
    continue;
    }
    targetRow = targetSheet.createRow(i - pStartRow + pPosition);
    targetRow.setHeight(sourceRow.getHeight());
    for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++)
    {
    sourceCell = sourceRow.getCell(j);
    if (sourceCell == null)
    {
    continue;
    }
    targetCell = targetRow.createCell(j);
    targetCell.setEncoding(sourceCell.getEncoding());
    targetCell.setCellStyle(sourceCell.getCellStyle());
    cType = sourceCell.getCellType();
    targetCell.setCellType(cType);
    switch (cType)
    {
    case HSSFCell.CELL_TYPE_BOOLEAN:
    targetCell.setCellValue(sourceCell.getBooleanCellValue());
    break;
    case HSSFCell.CELL_TYPE_ERROR:
    targetCell.setCellErrorValue(sourceCell.getErrorCellValue());
    break;           
    case HSSFCell.CELL_TYPE_FORMULA:
    //parseFormula这个函数的用途在后面说明
    targetCell.setCellFormula(parseFormula(sourceCell.getCellFormula()));
    break;
    case HSSFCell.CELL_TYPE_NUMERIC:
    targetCell.setCellValue(sourceCell.getNumericCellValue());
    break;
    case HSSFCell.CELL_TYPE_STRING:
    targetCell.setCellValue(sourceCell.getStringCellValue());
    break;
    }
    }
    }
    }

这个函数有两个问题暂时无法解决:

a、只能在同一个Workbook里面使用,跨Workbook总是拷不过去,不知道为什么?

b、由于在拷贝行时也把行高也拷过去了,如果往这些单元格里写入的数据长度超过单元格长度,那么他们不会自动调整行高!

3、公式的问题

POI对Excel公式的支持是相当好的,但是我发现一个问题,如果公式里面的函数不带参数,比如now()或today(),那么你通过getCellFormula()取出来的值就是now(ATTR(semiVolatile))和today(ATTR(semiVolatile)),这样的值写入Excel是会出错的,这也是我上面copyRow的函数在写入公式前要调用parseFormula的原因,parseFormula这个函数的功能很简单,就是把ATTR(semiVolatile)删掉,我把它的代码贴出来:

private String parseFormula(String pPOIFormula)
    {
    final String cstReplaceString = "ATTR(semiVolatile)"; //$NON-NLS-1$
    StringBuffer result = null;
    int index;
   
    result = new StringBuffer();
    index = pPOIFormula.indexOf(cstReplaceString);
    if (index >= 0)
    {
    result.append(pPOIFormula.substring(0, index));
    result.append(pPOIFormula.substring(index + cstReplaceString.length()));
    }
    else
    {
    result.append(pPOIFormula);
    }
   
    return result.toString();
    }

至于为什么会出现ATTR(semiVolatile),还需要大家的探索精神!

4、向Excel写入图片的问题。

我上POI论坛查相关帖子,得到两种结论:

1、不支持写入图片;

2、支持写入图片,通过EscherGraphics2d这个Class实现。于是我就去查EscherGraphics2d这个Class,发现这个Class提供了N个drawImage方法,喜出望外的我开始写代码,结果调了一天,一直看不到效果,黔驴技穷的我在万般无奈下只好跟踪进drawImage这个函数内部,经过N个函数调用后在最底层函数发现了最终答案:


public boolean drawImage(Image image, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1,
   int sx2, int sy2, Color bgColor, ImageObserver imageobserver)
   {
   if (logger.check( POILogger.WARN ))
   logger.log(POILogger.WARN,"drawImage() not supported");
   return true;
   }

所以我强烈建议大家,以后使用第三方开发包一定尽量下载它的源代码,这样你在碰到问题时,看看它的的内部是怎么实现的,很多时候就可以不必重蹈我的覆辙了。既然POI不能写入图片,那我们只能把目光投向JXL,我用JXL写入图片功能是实现了,付出的代价是now()和today()这些函数丢失掉了,鱼与熊掌不能兼得吧。

==========================jsp操作===============================


<%@ page contentType="application/msexcel;charset=gb2312" %>
response.setHeader("Content-disposition","inline; filename=test1.xls");
   //以上这行设定传送到前端浏览器时的档名为test1.xls
   //就是靠这一行,让前端浏览器以为接收到一个excel档
下面正常显示要转化的表

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

介绍:
Jakarta_POI 使用Java读写Excel(97-2002)文件,可以满足大部分的需要。
因为刚好有一个项目使用到了这个工具,花了点时间顺便翻译了一下POI本身
带的一个Guide.有一些节减和修改,希望给使用这个项目的人一些入门帮助。
POI 下面有几个自项目:HSSF用来实现Excel 的读写.以下是HSSF的主页
http://jakarta.apache.org/poi/hssf/index.html
下面的介绍是基于以下地址的翻译:
http://jakarta.apache.org/poi/hssf/quick-guide.html
目前的版本为1.51应该是很长时间之内的一个稳定版,但HSSF提供的Sample不是基于
1.51所写,所以使用的时候需要适当的注意.
其实POI下面的几个子项目侧重不同读写 Word 的HDF正在开发当中.
XML下的FOP(http://xml.apache.org/fop/index.html)
可以输出pdf文件,也是比较好的一个工具
目录:
创建一个workbook
创建一个sheet
创建cells
创建日期cells
设定单元格格式

说明:
以下可能需要使用到如下的类
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;

创建workbook

HSSFWorkbook wb = new HSSFWorkbook();
//使用默认的构造方法创建workbook
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
//指定文件名
wb.write(fileOut);
//输出到文件
fileOut.close();

创建一个sheet

HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet1 = wb.createSheet("new sheet");
//workbook创建sheet
HSSFSheet sheet2 = wb.createSheet("second sheet");
//workbook创建另外的sheet
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();

创建cells
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");
//注意以下的代码很多方法的参数是short 而不是int 所以需要做一次类型转换
HSSFRow row = sheet.createRow((short)0);
//sheet 创建一行
HSSFCell cell = row.createCell((short)0);
//行创建一个单元格
cell.setCellValue(1);
//设定单元格的值
//值的类型参数有多中double ,String ,boolean,
row.createCell((short)1).setCellValue(1.2);
row.createCell((short)2).setCellValue("This is a string");
row.createCell((short)3).setCellValue(true);

// Write the output to a file
FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();


-

文章出处:http://www.diybl.com/course/3_program/java/javajs/2008910/141622_2.html

创建日期cells
HSSFWorkbook wb = new HSSFWorkbook();
HSSFSheet sheet = wb.createSheet("new sheet");

HSSFRow row = sheet.createRow((short)0);

HSSFCell cell = row.createCell((short)0);
//设定值为日期
cell.setCellValue(new Date());

HSSFCellStyle cellStyle = wb.createCellStyle();
//指定日期显示格式
cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));
cell = row.createCell((short)1);
cell.setCellValue(new Date());
//设定单元格日期显示格式
cell.setCellStyle(cellStyle);

FileOutputStream fileOut = new FileOutputStream("workbook.xls");
wb.write(fileOut);
fileOut.close();


设定单元格格式
单元格格式的设定有很多形式包括单元格的对齐方式,内容的字体设置,
单元格的背景色等,因为形式比较多,只举一些例子.以下的例子在
POI1.5中可能会有所改变具体查看API.
..........
// Aqua background
HSSFCellStyle style = wb.createCellStyle();
//创建一个样式
style.setFillBackgroundColor(HSSFCellStyle.AQUA);
//设定此样式的的背景颜色填充
style.setFillPattern(HSSFCellStyle.BIG_SPOTS);

//样式的填充类型。
//有多种式样如:
//HSSFCellStyle.BIG_SPOTS
//HSSFCellStyle.FINE_DOTS
//HSSFCellStyle.SPARSE_DOTS等
style.setAlignment(HSSFCellStyle.ALIGN_CENTER );
//居中对齐
style.setFillBackgroundColor(HSSFColor.GREEN.index);
//设定单元个背景颜色
style.setFillForegroundColor(HSSFColor.RED.index);
//设置单元格显示颜色
HSSFCell cell = row.createCell((short) 1);
cell.setCellValue("X");
cell.setCellStyle(style);

-----------------------------------------------------------------
加上response.setContentType("Application/msexcel");
     response.setHeader("Content-disposition","attachment; filename=book.xls" );
然后提交给它的时候会时候会提示下载,
下载的就是生成的EXCEL文件。

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


有趣的是,对一个html文件(数据在表格中),当把后缀改为xls后,打开文件即是。

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

>>加上response.setContentType("Application/msexcel");
>>     response.setHeader("Content-disposition","attachment; >>filename=book.xls" );
>>然后提交给它的时候会时候会提示下载,
>>下载的就是生成的EXCEL文件。

book.xls的存放路径应该是哪里?

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


使用poi的hssf生成一个excel文件以后
有一个主类Workbook(相当于一个excel文件)的方法
Workbook.write(OutputStream)可以写到response.getOutputStream()里面
如果事先设置response的contentType为excel和下载的附件名称就可下载excel
    HSSFWorkbook book = _proxy.expertExcel(_formBean,_login);

    if(book!=null)
    {
        response.setContentType ( "application/ms-excel" ) ;
        response.setHeader ( "Content-Disposition" ,
                             "attachment;filename="+new String("导出Excel.xls".getBytes(),"iso-8859-1"))

;
        book.write(response.getOutputStream());
}
其中expertExcel无非是从数据库或者其他地方获取数据创建excel即可.


---------------------------------------------------------------
response.setHeader("Content-disposition","attachment; filename=book.xls" );
原来加上attachment浏览器就会提示保存或者打开,是我想要的。Thanks all.


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

1.用poi生成Excel文件,和WORD文档都可以,是个不错的方法,参见poi网站,楼上的朋友描述的很清楚了,此方法适用于生

成,读取,解析xls文件
2.另外一种更简单的方法:只适用于显示用的EXCEL文件格式,生成常规的html文件格式,后缀命名方式为.xls即可.
3.espreadsheet适用于网上即时的excel文件交互操作,生成,解析,保存修改,但需要购买

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

生成一个rtf文件,然后扩展名写".doc",OK

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

用这个组件向excel写数据时,总是出现中文乱码情况,请问怎样解决?

源代码:

HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("new sheet");
        HSSFHeader header = sheet.getHeader();
        header.setCenter("Center Header");
        HSSFRow row = sheet.createRow((short)0);                    
        HSSFCell cell = row.createCell((short)0);                 
        cell.setCellValue(1);                                        
        row.createCell((short)1).setCellValue(1.2123654);
        row.createCell((short)2).setCellValue("This is a string");
        row.createCell((short)3).setCellValue(true);
        row = sheet.createRow((short)1);
        cell = row.createCell((short)0);                        
        cell.setCellValue(new Date());                    
        row.createCell((short)1).setCellValue(str);
        row.createCell((short)2).setCellValue("This我是一个好人string");
        FileOutputStream fileOut = new FileOutputStream("d:/filename.xls");
        wb.write(fileOut);
        fileOut.close();

当我打开这个"d:/filename.xls"文件时,其中写入的中文全都是乱码!!!
如何解决???

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

源代码:
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("new sheet");
        HSSFHeader header = sheet.getHeader();
        header.setCenter("Center Header");
        HSSFRow row = sheet.createRow((short)0);
        HSSFCell cell = row.createCell((short)0);
        cell.setCellValue(1);
        row.createCell((short)1).setCellValue(1.2123654);
        row.createCell((short)2).setCellValue("This is a string");
        row.createCell((short)3).setCellValue(true);
        row = sheet.createRow((short)1);
        cell = row.createCell((short)0);  
        cell.setCellValue(new Date());                    
        String str = new String("我是一个好人!!!");
        row.createCell((short)1).setCellValue(str);
        row.createCell((short)2).setCellValue("This我是一个好人string");
       
        FileOutputStream fileOut = new FileOutputStream("d:/filename.xls");
        wb.write(fileOut);
        fileOut.close();
当我打开“d:/filename.xls”文件察看时,里面的中文字符全部是乱码!
请问如何解决?

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

<%@ page contentType="application/msexcel;charset=gb2312" %>
response.setHeader("Content-disposition","inline; filename=***.xls");就可以了,要是想要word 就
<%@ page contentType="application/msword;charset=gb2312" %>
response.setHeader("Content-disposition","inline; filename=test1.xls");


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

引用 pengruihua 说:

        有趣的是,对一个html文件(数据在表格中),当把后缀改为xls后,打开文件即是。

这个只能说明excel强,这样写得xls,在JXL或者POI中都是不认的。

加一句,用POI写Excel有点问题,当反复读写一个excel文件的时候,读的速度会越来越慢。
我的一个生成excel的就是,到了几千条记录的时候慢得就不能接受了,最后只好先生成cvs的文本,再将文本导成xls

文件


---------------------------------------------------------------------------
引用 java_century 说:

        源代码:
        HSSFWorkbook wb = new HSSFWorkbook();
        HSSFSheet sheet = wb.createSheet("new sheet");
        HSSFHeader header = sheet.getHeader();
        header.setCenter("Center Header");
        HSSFRow row = sheet.createRow((short)0);
        HSSFCell cell = row.createCell((short)0);
        cell.setCellValue(1);
        row.createCell((short)1).setCellValue(1.2123654);
        row.createCell((short)2).setCellValue("This is a string");
        row.createCell((short)3).setCellValue(true);
        row = sheet.createRow((short)1)

-

文章出处:http://www.diybl.com/course/3_program/java/javajs/2008910/141622_3.html

;
        cell = row.createCell((short)0);  
        cell.setCellValue(new Date());                    
        String str = new String("我是一个好人!!!");
        row.createCell((short)1).setCellValue(str);
        row.createCell((short)2).setCellValue("This我是一个好人string");
       
        FileOutputStream fileOut = new FileOutputStream("d:/filename.xls");
        wb.write(fileOut);
        fileOut.close();
当我打开“d:/filename.xls”文件察看时,里面的中文字符全部是乱码!
请问如何解决?


使用POI这样处理中文
HSSFCell cell = row.createCell((short)1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("中文");

-

横向打印的方法

sheets   =   wb.createSheet("testsheet");  
  HSSFPrintSetup   ps   =   sheets.getPrintSetup();  
  ps.setLandscape(true);//打印方向,为true时为横向打印

- 作者: pegasus827 2009年02月17日, 星期二 09:24  回复(0) |  引用(0) 加入博采

java的POI操作Excel文件(1)

微软在桌面系统上的成功,令我们不得不大量使用它的办公产品,如:Word,Excel。时至今日,它的源代码仍然不公开已封锁了我们的进一步应用和开发。然而在要求更高的服务器领域,微软本身的产品移植性不好,
性能不佳。在我们实际的开发中,表现层的解决方案虽然有多样,但是Ie浏览器已成为最多人使用的浏览器,因为大家都用Windows。在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开。或者是:我们已经习惯用Excel打印。这样子如果用.net开发是没有问题的,但是有j2ee这个比.net更有前途的开放式的开发环境,难道我为了解决打印的要求去另写客户端的控件?或者在服务器端使用本地代码?第一种方案的问题是关键数据的处理有时候不能在客户端做,第2种方案的问题是牺牲了代码的可移植性和稳定性。如果让客户端只负责处理生成好的报表,那将是一种诱人的选择。

Apache的Jakata项目的POI子项目,目标是处理ole2对象。目前比较成熟的是HSSF接口,处理MS Excel(97-2002)对象。它不象我们仅仅是用csv生成的没有格式的可以由Excel转换的东西,而是真正的Excel对象,你可以控制一些属性如sheet,cell等等。这是一个年轻的项目,所以象HDF这样直接支持Word对象的好东西仍然在设计中。其它支持word格式的纯java方案还有itext,不过也是仍在奋斗中。但是HSSF已经成熟到能够和足够我们使用了。另外,无锡永中Office的实现方案也是纯java的解决方案,不过那也是完全商业的产品,并不是公开代码项目。其实,从开发历史的角度讲,在80年代中期starOffice的原作者在德国成立了StarOffice suite公司,然后到1999年夏天starOffice被sun收购,再到2000年6月starOffice5.2的发布;并且从starOffice6.0开始,starOffice建立在OpenOffice的api的基础上,这个公开代码的office项目已经进行了很长的时间。虽然那是由C++写的,但是POI的代码部分也是由openOffice改过来的。所以,应该对POI充满足够的信心。国内已经有部分公司在他们的办公自动化等Web项目中使用poi了,如日恒的ioffice,海泰的HTOffice等。

java当初把核心处理设成Unicode,带来的好处是另代码适应了多语言环境。然而由于老外的英语只有26个字母,有些情况下,一些程序员用8位的byte处理,一不小心就去掉了CJK的高位。或者是由于习惯在程序中采用硬编码,还有多种原因,使得许多java应用在CJK的处理上很烦恼。还好在POI HSSF中考虑到这个问题,可以设置encoding为双字节。

POI可以到www.apache.org下载到。编译好的jar主要有这样4个:poi包,poi Browser包,poi hdf包,poi hssf例程包。实际运行时,需要有poi包就可以了。如果用Jakarta ant编译和运行,下载apache Jakarta POI的release中的src包,它里面已经为你生成好了build文件了。只要运行ant就可以了(ant 的安装和使用在此不说了)。如果是用Jbuilder 运行,请在新建的项目中加入poi包。以Jbuilder6为例,选择Tools菜单项的config libraries...选项,新建一个lib。在弹出的菜单中选择poi包,如这个jakarta-poi-1.5.1-final-20020820.jar,把poi添加到jbuilder中。然后,右键点击你的项目,在project的properties菜单中path的required Libraries中,点add,添加刚才加入到jbuilder中的poi到你现在的项目中。如果你仅仅是为了熟悉POI hssf的使用,可以直接看POI的samples包中的源代码,并且运行它。hssf的各种对象都有例程的介绍。hssf提供的例程在org.apache.poi.hssf.usermodel.examples包中,共有14个,生成的目标xls都是workbook.xls。如果你想看更多的例程,可以参考hssf的Junit test cases,在poi的包的源代码中有。hssf都有测试代码。

这里只对部分例程的实现做介绍。

HSSF提供给用户使用的对象在org.apache.poi.hssf.usermodel包中,主要部分包括Excell对象,样式和格式,还有辅助操作。有以下几种对象:

HSSFWorkbook excell的文档对象

HSSFSheet excell的表单

HSSFRow excell的行

HSSFCell excell的格子单元

HSSFFont excell字体

HSSFName 名称

HSSFDataFormat 日期格式

在poi1.7中才有以下2项:

HSSFHeader sheet头

HSSFFooter sheet尾

和这个样式

HSSFCellStyle cell样式

辅助操作包括

HSSFDateUtil 日期

HSSFPrintSetup 打印

HSSFErrorConstants 错误信息表

仔细看org.apache.poi.hssf包的结构,不难发现HSSF的内部实现遵循的是MVC模型。

这里我用Rose把org.apache.poi.hssf.usermodel包中的对象反向导入并根据相互关系作了整理,详见下面两图:

图1 基本对象

从中不难可以发现每一个基本对象都关联了一个Record对象。Record对象是一个参考Office格式的相关记录。

图2 HSSFWorkbook

HSSFWorkbook即是一个Excell对象。这幅类图体现的是HSSFWorkbook和基本对象的相互关系。可见,许多对象中也建立了Workbook的引用。还需要注意的是在HSSFWorkbook和HSSFSheet中建立了log机制POILogger,而且POILogger也是使用apache Log4J实现的。

先看poi的examples包中提供的最简单的例子,建立一个空xls文件。

import org.apache.poi.hssf.usermodel.HSSFWorkbook;

import java.io.FileOutputStream;

import java.io.IOException;

public class NewWorkbook

{

public static void main(String[] args)

throws IOException

{

HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook对象

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);//把Workbook对象输出到文件workbook.xls中

fileOut.close();

}

}

通过这个例子,我们建立的是一个空白的xls文件(不是空文件)。在此基础上,我们可以进一步看其它的例子。

import org.apache.poi.hssf.usermodel.*;

import java.io.FileOutputStream;

import java.io.IOException;

public class CreateCells

{

public static void main(String[] args)

throws IOException

{

HSSFWorkbook wb = new HSSFWorkbook();//建立新HSSFWorkbook对象

HSSFSheet sheet = wb.createSheet("new sheet");//建立新的sheet对象

// Create a row and put some cells in it. Rows are 0 based.

HSSFRow row = sheet.createRow((short)0);//建立新行

// Create a cell and put a value in it.

HSSFCell cell = row.createCell((short)0);//建立新cell

cell.setCellValue(1);//设置cell的整数类型的值

// Or do it on one line.

row.createCell((short)1).setCellValue(1.2);//设置cell浮点类型的值

row.createCell((short)2).setCellValue("test");//设置cell字符类型的值

row.createCell((short)3).setCellValue(true);//设置cell布尔类型的值

HSSFCellStyle cellStyle = wb.createCellStyle();//建立新的cell样式

cellStyle.setDataFormat(HSSFDataFormat.getFormat("m/d/yy h:mm"));//设置cell样式为定制的日期格式

HSSFCell dCell =row.createCell((short)4);

dCell.setCellValue(new Date());//设置cell为日期类型的值

dCell.setCellStyle(cellStyle); //设置该cell日期的显示格式

HSSFCell csCell =row.createCell((short)5);

csCell.setEncoding(HSSFCell.ENCODING_UTF_16);//设置cell编码解决中文高位字节截断

csCell.setCellValue("中文测试_Chinese Words Test");//设置中西文结合字符串

row.createCell((short)6).setCellType(HSSFCell.CELL_TYPE_ERROR);//建立错误cell

// Write the output to a file

FileOutputStream fileOut = new FileOutputStream("workbook.xls");

wb.write(fileOut);

fileOut.close();

}

}

我稍微修改了原来的examples包中的CreateCells类写了上面的功能测试类。通过这个例子,我们可以清楚的看到xls文件从大到小包括了HSSFWorkbook HSSFSheet HSSFRow HSSFCell这样几个对象。我们可以在cell中设置各种类型的值。尤其要注意的是如果你想正确的显示非欧美的字符时,尤其象中日韩这样的语言,必须设置编码为16位的即是HSSFCell.ENCODING_UTF_16,才能保证字符的高8位不被截断而引起编码失真形成乱码。

其他测试可以通过参考examples包中的测试例子掌握poi的详细用法,包括字体的设置,cell大小和低纹的设置等。需要注意的是POI是一个仍然在完善中的公开代码的项目,所以有些功能正在不断的扩充。如HSSFSheet的getFooter() getHeader()和setFooter(HSSFFooter hsf) setHeader(HSSFHeader hsh)是在POI1.7中才有的,而POI1.5中就没有。运行测试熟悉代码或者使用它做项目时请注意POI的版本。

另外需要注意的是HSSF也有它的对xls基于事件的解析。可以参考例程中的EventExample.java。它通过实现HSSFListener完成从普通流认知Xls中包含的内容,在apache Cocoon中的org.apache.cocoon.serialization.HSSFSerializer中用到了这个解析。因为Cocoon2是基于事件的,所以POI为了提供快速的解析也提供了相应的事件。当然我们自己也可以实现这个事件接口。

因为POI还不是一个足够成熟的项目,所以有必要做进一步的开发和测试。但是它已经为我们用纯java操作ole2对象提供了可能,而且克服了ole对象调用的缺陷,提供了服务器端的Excel解决方案。
======================================================

利用Java 创建和读取Excel文档

--------------------------------------------------------------------------------
源作者:Rubber                   人气:26748
   为了保证示例程序的运行,必须安装Java 2 sdk1.4.0 和Jakarta POI,Jakarta POI的Web站点是: http://jakarta.apache.org/poi/

示例1将演示如何利用Jakarta POI API 创建Excel 文档。

示例1程序如下:
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileOutputStream;
public class CreateXL {
 /** Excel 文件要存放的位置,假定在D盘JTest目录下*/
 public static String outputFile="D:/JTest/ gongye.xls";
 public static void main(String argv[])
{
 try
{
  // 创建新的Excel 工作簿
  HSSFWorkbook workbook = new HSSFWorkbook();
  // 在Excel工作簿中建一工作表,其名为缺省值
  // 如要新建一名为"效益指标"的工作表,其语句为:
  // HSSFSheet sheet = workbook.createSheet("效益指标");
  HSSFSheet sheet = workbook.createSheet();
  // 在索引0的位置创建行(最顶端的行)
  HSSFRow row = sheet.createRow((short)0);
  //在索引0的位置创建单元格(左上端)
  HSSFCell cell = row.createCell((short) 0);
  // 定义单元格为字符串类型
  cell.setCellType(HSSFCell.CELL_TYPE_STRING);
  // 在单元格中输入一些内容
  cell.setCellValue("增加值");
  // 新建一输出文件流
  FileOutputStream fOut = new FileOutputStream(outputFile);
  // 把相应的Excel 工作簿存盘
  workbook.write(fOut);
  fOut.flush();
  // 操作结束,关闭文件
  fOut.close();
  System.out.println("文件生成...");

 }catch(Exception e) {
  System.out.println("已运行 xlCreate() : " + e );
 }
}
}

读取Excel文档中的数据
  示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为gongye.xls的Excel文件。
  示例2程序如下:
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.FileInputStream;
public class ReadXL {
 /** Excel文件的存放位置。注意是正斜线*/
 public static String fileToBeRead="D:/JTest/ gongye.xls";
 public static void main(String argv[]){
 try{
  // 创建对Excel工作簿文件的引用
  HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(fileToBeRead));
  // 创建对工作表的引用。
  // 本例是按名引用(让我们假定那张表有着缺省名"Sheet1")
  HSSFSheet sheet = workbook.getSheet("Sheet1");
  // 也可用getSheetAt(int index)按索引引用,
  // 在Excel文档中,第一张工作表的缺省索引是0,
  // 其语句为:HSSFSheet sheet = workbook.getSheetAt(0);
  // 读取左上端单元
  HSSFRow row = sheet.getRow(0);
  HSSFCell cell = row.getCell((short)0);
  // 输出单元内容,cell.getStringCellValue()就是取所在单元的值
  System.out.println("左上端单元是: " + cell.getStringCellValue());
 }catch(Exception e) {
  System.out.println("已运行xlRead() : " + e );
 }
}
}


  设置单元格格式
  在这里,我们将只介绍一些和格式设置有关的语句,我们假定workbook就是对一个工作簿的引用。在Java

中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:

  1、创建字体,设置其为红色、粗体:
HSSFFont font = workbook.createFont();
font.setColor(HSSFFont.COLOR_RED);
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
  2、创建格式
HSSFCellStyle cellStyle= workbook.createCellStyle();
cellStyle.setFont(font);
  3、应用格式
HSSFCell cell = row.createCell((short) 0);
cell.setCellStyle(cellStyle);
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
cell.setCellValue("标题 ");

  总之,如本篇文章所演示的一样,Java程序员不必担心Excel工作表中的数据了,利用Jakarta POI API,

我们就可以轻易的在程序中存取Excel文档。

==============================================

首先说说现在我所知道的Java编辑Excel文件的两大开源工具:

jakarta POI和JavaExcelAPI(简称JXL),这两套工具我都试用了一这段时间,感觉各有优劣吧。POI在某些细节有些小Bug并且不支持写入图片,其他方面都挺不错的;

JXL就惨了,除了支持写入图片外,我暂时看不到它比POI好的地方,我碰到的主要的问题就是对公式支持不是很好,很多带有公式的Excel文件用JXL打开后,公式就丢失了(比如now(),today()),在网上看到其他大虾评论说JXL写入公式也有问题,另外,JXL操作Excel文件的效率比POI低一点。经过比较后,我选择了POI开发我的项目。

- 作者: pegasus827 2009年02月17日, 星期二 09:22  回复(0) |  引用(0) 加入博采

小白mysql存储过程helloworld

 String DBDriver;
    String ConnStr;
    Connection conn;
 CallableStatement cstmt;
    ResultSet rs;
 String newstitle=new String();
 DBDriver = "org.gjt.mm.mysql.Driver";
    ConnStr = "jdbc:mysql://localhost:3306/cunchuguocheng?user=rootadmin&password=12345&useUnicode=true&characterEncoding=8859_1";
 try{
Class.forName(DBDriver);
//加载数据库驱动程序
     }
   catch(java.lang.ClassNotFoundException e) {
System.err.println("MySQLconn(): "+e.getMessage());
}
try {
conn = DriverManager.getConnection(ConnStr);
//与DBMS建立链接
cstmt=conn.prepareCall("{call hellodb()}");
rs=cstmt.executeQuery();
if(rs.next())
{
  newstitle=rs.getString("newstitle");
  out.print("存储过程获得成功,输出结果:"+newstitle);
  }
rs.close();
conn.close();
     }
catch(SQLException ex) {
System.err.println("aq.executeQuery:"+ex.getMessage());
     }

在数据库中创建该过程


mysql>delimiter //  


CREATE PROCEDURE hellodb()
BEGIN
   select * from news;
END;//

具体call语法调用参见以前资料

- 作者: pegasus827 2009年02月17日, 星期二 09:07  回复(0) |  引用(0) 加入博采

商标设计
 是指:商标创意的体现和表达,是用文字或艺术手段将商标构思具体化、成果化。
  商标设计应注意:
  (1) 切忌模仿,步入后尘。
  模仿或部分模仿他人商标,将会使自身的商标独创独创性。如他人在酒类商品上已注册了“红楼梦”商标,你再申请“红楼梦情”、“红楼世家”或“醉红楼”等,不仅失去了独创性,注册申请也很难核准。
  (2) 繁简适中,易读易记。
  既要充分考虑易于识别和记忆,又要注意文字或图形太简单,而失去显著特征。
  (3) 暗示特点,体现创意。
  要与商标指定商品或服务项目相联系,使人联想到商品或服务特点,把商标构思的立意充分体现出来。
  (4) 结合装潢,主次分明。
  LOGO、标志是现代经济的产物,它不同与古代的印记,现代标志承载着企业的无形资产,是企业综合信息传递的媒介。标志作为企业CIS战略的最主要部分,在企业形象传递过程中,是应用最广泛、出现频率最高,同时也是最关键的元素。企业强大的整体实力、完善的管理机制、优质的产品和服务,都被涵概于标志中,通过不断的刺激和反复刻画,深深的留在受众心中。
  轩辕文化传播
  轩辕文化传播有限公司,团聚大中华区优势组合,致力于品牌整合推广的创意执行。作为国内品牌推广机构中的新锐,我们一贯以执着的专业精神,为目标客户打造品牌的核心竞争力。从商标注册伊始,轩辕文化传播就为您提供系统的品牌塑造增值方面的解决方案。我们在知识产权规划、品牌和企业形象一体化设计、网络互动传播、事件行销和市场调查、分析等优势领域为您提供一体化的全程顾问和执行。

标志的色彩设计

  色彩信息传播的速度,比点、线、面对人的视觉冲击力更强更快,它以每秒30万公里的光速传入人的眼睛,是一种先声夺人的广告语。它这一快速”功能,被用在一些指示“紧急”和“危险”的汽车上,如红色救火车、白色救护车,具有高度提示人们的警觉与注意力的功能。
  在名字设计过程中,运用色彩的感觉与联想信息,对激发消费者的心理联想与欲望,树建自己的品牌个性,尤为重要。为此品牌设计者必须认真学习与研究色彩的感情、色彩的冷暖以至于色彩的轻重感、色彩的软硬感、色彩的面积感、色彩的空间感、色彩的味觉感。
  色彩的感觉指不同色彩的色相、色度、明度给人带来不同的心理暗示。品牌设计者需要掌握的色彩感觉
  色彩的感情
  红色——热烈、刺激、温暖
  黄色——中性、高贵、较安静
  绿色——中性、活力、青春、和平、较安静
  蓝色——给人清冷、恬静、深远感
  白色——给人纯洁、干净、凄凉感
  黑色——给人庄重、朴实、悲哀感
  色彩的冷暖感
  红色、橙色、黄色为暖色;紫色、蓝色与暖色之间的中间色,给人凉的感觉。
  色彩的轻重感
  青色为冷色;绿色属冷色。明度强的颜色感觉轻,明度弱的颜色感觉重,也就是说给人的感觉轻,深色给人的感觉重。
  色彩的软硬感
  暖色、亮色感觉软而柔和,冷色、暗色感觉硬而坚固。
  色彩的面积感
  深暗的色彩给人面积小的感觉的感觉。
  色彩的空间感
  明度较强的色彩感觉远,明度饺弱的色彩感觉近。
  色彩的味觉感
  黄色、蓝色、绿色,给人酸味感,白色、乳黄色、粉红色给人甜昧感,茶色、暗绿色、黑色给人苦昧感,红色给人辣昧感。 暖色系列给人温暖、快活的感觉:冷色系列给人以清凉、寒冷和安静的感觉。如将冷暖两色并用,给人的感觉则是暖色向外扩张、前移,冷色向内收缩、后移。了解色彩规律,对选择色彩突出品牌名称很有实用价值。
  色彩联想是指消费者接触到某一色彩时所想到的东西,包括思想感情和物的形态等几方面的内容。各种色彩的联想如下:
  白色——纯真、清洁、明快、洁白、雪花。此外,在中国民俗中,白色还让人想到悲哀的事情。
  黑色一寂静、绝望、不幸、恐怖、沉默、严肃。此外,服,给人庄重的感觉。
  灰色——中庸、平凡、温和、谦让、不公平。
  红色——太阳、火焰、紧急、血、喜庆、热情、爱情、活力积极、危险。
  橙色——阳气、积极、乐观、热烈。此外有欺诈、嫉妒
  黄色——希望、富丽、权威、辉煌、智慧、金子、快活。
  绿色——草木、和平、环保、成长、健康、自然、安静。
  青色——诚实、沉着、海洋、广大、悠久、消极、智慧。
  紫色——优雅、高贵、壮丽、神秘、永远、不安、气魄。
  金色——名誉、富贵、忠诚。
  银色——信仰、富有、纯洁。

- 作者: pegasus827 2009年02月17日, 星期二 08:52  回复(0) |  引用(0) 加入博采

平面设计中的194种创意拓展思路
 

     下面这些方法和思路看似简单,对从事平面设计和影视广告设计的技术人员是有很大的帮助。特别是当思路被困住的时候,看看这些就会有新的想法。

1、把它颠倒过来

2、把它摆平

3、把缩小

4、把颜色变换一下

5、把它变为圆形

6、使它更大

7、把它变为正方形

8、使它更小

9、使它更长

10、使它闪动

11、使它更短

12、使它发出火花

13、使它可以看到

14、点燃它

15、使它逾起一般情况

16、使它发萤光

17、把它放进文字里

18、使它沉重

19、把它插进音乐里

20、使它成为引火物

21、结合文字和音乐

22、使它成为引火物

23、结合文字、音乐和图画

24、参加竞赛

25、结合音乐和图画删除文字

26、参加打赌

27、不要图画

28、使它成为年轻型的

29、不要文字

30、使它成为壮年型的

31、沉默无声

32、把它分割开

33、使它重复

34、保守地说

35、使它变成立体

36、夸张地说

37、使它变成平面

38、当替代品卖

39、变换它的形态

40、发现新用途

41、只变更一部分

42、减掉它

43、使它成为一组

44、撕开它

45、为捐献或义卖而销售

46、使它化合

47、鼓励它

48、用显而易见的

49、机动化

50、把要素重新配置

51、电气代

52、降低调子

53、使它活动

54、提高调子

55、使它相反

56、割开它

57、它像是某种东西的代替品

58、混合在一起

59、使它罗曼蒂克

60、改用另一种形式表现

61、增添怀旧的诉求

62、使它的速度加快

63、使它看起来流行


64、使它缓慢下来

65、使它看起来像未来派

66、使它飞行

67、使它成为某种物品的部分代替

68、使它浮起

69、使它更强壮

70、使它滚转

71、使它更强壮

72、把它切成片状

73、运用象征

74、使它成为粉状

75、它是写实派

76、以性欲作诉求

77、运用新艺术形式

78、使它凝缩

79、变为摄影技巧

80、使它弯曲

81、变换为图解方式

82、使它成对

83、使它变更形式

84、使它倾斜

85、用图画说明你的故事

86、使它悬浮半空中

87、使用新广告媒体

90、把它由里外翻转

91、使它更强烈

92、把它向旁边转

93、使它更冷

94、摇动它

95、增加香味

96、把它遮蔽起来

97、变换气味

98、使它对称

99、把它除臭

100、使它不对称

101、将它向儿童诉求

102、反它隔开

103、将它向男士诉求

104、使它与其他相敌对

105、将它向妇女诉求

106、使它锐利

107、价钱更低

108、变更它的外形

109、抬高价格

110、要它绕一周

111、变更成份

112、把它框起来

113、增加新成份

114、把它卷成一圈

115、拧搓它

116、把它填满

117、使它透明

118、把它弄成空的

119、使它不透明

120、把它打开

121、用不同背景

122、把拼错

123、用不同环境

124、给它起我上绰号

125、使它富有魅力

126、把它封印起来

127、使用视觉效果

128、把它移转过来

129、使用另外的物料

130、把它捆包起来


131、增加人的趣味

132、把它集中起来

133、变更密度

134、把它推开

135、置于不同的货柜

136、使它成为交替的

137、变换包装

138、使它凝固起来

139、使密度增加

140、使它溶化

141、小型化

142、使成凝胶状

143、增加至最大限

144、使它软化

145、把它除掉

146、使它硬化

147、使它轻便

148、使蒸发变为汽化

149、使它可以折叠

150、加上抑扬顿挫

151、趋向偏激

152、使它更狭窄

153、如夏天炎热

154、使它更宽广

155、如冬天寒冷

156、使它更滑稽

157、使拟人化

158、使它成为被讽刺的

159、使它更暗

160、用简短的文案

161、使它发光

162、用冗长的文案

163、使它灼

164、发现第二种用途

165、使它更有?/P>

166、使它合成在一起

167、把它倒进瓶中

168、把它当作用具来卖

169、把它倒进罐中

170、使它清净

171、把它放进盒中

172、把它倒进壶中

173、把它倒进缸中

174、把它弄直

175、把它褶曲

176、把它缠起来

177、提升声誉

178、免费提供

179、以成本价出售

180、提供特价

181、增加慰藉的诉求

182、提供维护服务

183、运用不同的织法

184、使它变成香郁宜人

185、使它变成酸的

186、使它濡湿

187、使它脱水

188、使它干燥

189、把它冻起来

190、把它抛出去

191、使它无刺激性的

192、使它单纯化

193、使它具有刺激性的

194、把以上各项任意组合

gigi_miao

- 作者: pegasus827 2009年02月15日, 星期日 11:55  回复(0) |  引用(0) 加入博采

java excel jxl读excel到数据库例子
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.sql.*;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import jxl.*;
public class SimUpdate {
private String fileName;
public SimUpdate(String fileName){
this.fileName = fileName;
}
static Map tNames;
static{
tNames = new HashMap();
}
//下面是主要代码

private void updateDb(){
try{
Connection conn = DbPool.connectDB();
if(conn != null){
Statement stmt = conn.createStatement();
/**********************************************/
jxl.Workbook rwb = null;
try{
//构建Workbook对象 只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创建Workbook
InputStream is = new FileInputStream(fileName);
rwb = Workbook.getWorkbook(is);
//Sheet(术语:工作表)就是Excel表格左下角的Sheet1,Sheet2,Sheet3但在程序中
//Sheet的下标是从0开始的
//获取第一张Sheet表
Sheet rs = rwb.getSheet(0);
//获取Sheet表中所包含的总列数
int rsColumns = rs.getColumns();
//获取Sheet表中所包含的总行数
int rsRows = rs.getRows();
//获取指这下单元格的对象引用

String simNumber = "",termSeqId = "";
//指定SIM卡号及序列号
for(int i=0;i<rsRows;i++){
for(int j=0;j<rsColumns;j++){
Cell cell = rs.getCell(j,i);
if(j==0){
simNumber = cell.getContents();//这里是猎取你要的参数,和下面一样
}
if(j == 1){
termSeqId = cell.getContents();
}
}
String sql = "update ....";//SQL语句
int isOk = stmt.executeUpdate(sql);
if(isOk == 0){

String insertSql = "insert....";//SQL语句
int isAdd = stmt.executeUpdate(insertSql);
if(isAdd > 0){
System.out.println("成功插入第"+i+"条数据");
}

}

}

//以下代码为写入新的EXCEL,这里不使用,所以注释
/*

//利用已经创建的Excel工作薄创建新的可写入的Excel工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File("D://Book2.xls"),rwb);
//读取第一张工作表
jxl.write.WritableSheet ws = wwb.getSheet(0);

//获取第一个单元格对象
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);
//决断单元格的类型,做出相应的转化
if (wc.getType() == CellType.LABEL) {
Label l = (Label) wc;
l.setString("The value has been modified.");
}
//写入Excel对象
wwb.write();
wwb.close();
*/
}catch(Exception e){
e.printStackTrace();
}
finally{
//操作完成时,关闭对象,翻译占用的内存空间
rwb.close();

}
/*********************************************/



}
}catch(Exception e){
e.printStackTrace();
}
}


}

- 作者: pegasus827 2009年02月14日, 星期六 15:38  回复(0) |  引用(0) 加入博采

java操作Excel的一种方法 转
MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。作为办公文档,势必要涉及到的电子文档的交换,Excel是一种在企业中非常通用的文件格式,打印和管理也比较方便。在一个Java应用中,将一部分数据生成Excel格式,是与其他系统无缝连接的重要手段。

在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。其中jExcelAPI是一个韩国程序员的作品,虽然没有POI那样血统高贵,但是在笔者的使用过程中,感觉简单方便,对中文支持非常好,功能也比较强大。它的下载地址是:http://www.andykhan.com/jexcelapi/ 当前的最高版本是2.4。作者的网站上对它的特征有如下描述:

● 支持Excel 95-2000的所有版本
● 生成Excel 2000标准格式
● 支持字体、数字、日期操作
● 能够修饰单元格属性
● 支持图像和图表

应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

搭建环境

将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。

基本操作

一、创建文件

拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:

代码(CreateXLS.java):

//生成Excel的类
import java.io.*;
import jxl.*;
import jxl.write.*;

public class CreateXLS
{
public static void main(String args[])
{
try
{
//打开文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“测试.xls”));

//生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet=book.createSheet(“第一页”,0);

//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
//以及单元格内容为test
Label label=new Label(0,0,”test”);

//将定义好的单元格添加到工作表中
sheet.addCell(label);

/*生成一个保存数字的单元格
必须使用Number的完整包路径,否则有语法歧义
单元格位置是第二列,第一行,值为789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);

//写入数据并关闭文件
book.write();
book.close();

}catch(Exception e)
{
System.out.println(e);
}
}
}

编译执行后,会在当前位置产生一个Excel文件。

三、读取文件

以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:

//读取Excel的类
import java.io.*;
import jxl.*;

public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(“测试.xls”));

//获得第一个工作表对象
Sheet sheet=book.getSheet(0);

//得到第一列第一行的单元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);

book.close();

}catch(Exception e)
{
System.out.println(e);
}
}
}

程序执行结果:test

四、修改文件

利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。下面的例子是在我们已经生成的Excel文件中添加一个工作表:

//修改Excel的类,添加一个工作表
import java.io.*;
import jxl.*;
import jxl.write.*;

public class UpdateXLS
{
public static void main(String args[])
{
try
{
//Excel获得文件
Workbook wb=Workbook.getWorkbook(new File(“测试.xls”));

//打开一个文件的副本,并且指定数据写回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File(“测试.xls”),wb);

//添加一个工作表
WritableSheet sheet=book.createSheet(“第二页”,1);

sheet.addCell(new Label(0,0,”第二页的测试数据”));

book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}

执行结果如图:

高级操作

一、 数据格式化

在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。

1、 字串格式化

字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:


WritableFont font1=
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ①

WritableCellFormat format1=new WritableCellFormat(font1); ②

Label label=new Label(0,0,”data 4 test”,format1) ③

其中①指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。

②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。

③处使用了Label类的构造子,指定了字串被赋予那种格式。

在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定:

//把水平对齐方式指定为居中
format1.setAlignment(jxl.format.Alignment.CENTRE);

//把垂直对齐方式指定为居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

二、单元格操作

Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。

1、 合并单元格

WritableSheet.mergeCells(int m,int n,int p,int q);

作用是从(m,n)到(p,q)的单元格全部合并,比如:
WritableSheet sheet=book.createSheet(“第一页”,0);

//合并第一列第一行到第六列第一行的所有单元格
sheet.mergeCells(0,0,5,0);

合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。

2、 行高和列宽

WritableSheet.setRowView(int i,int height);

作用是指定第i+1行的高度,比如:

//将第一行的高度设为200
sheet.setRowView(0,200);

WritableSheet.setColumnView(int i,int width);

- 作者: pegasus827 2009年02月14日, 星期六 15:35  回复(0) |  引用(0) 加入博采

全面挖掘Java Excel API 使用方法

http://sourceforge.net/project/showfiles.php?group_id=79926  下载jxl.jar

使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel文件并不是一件容易的事。在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet 中创建一个CSV (comma separated values)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件。这样只是说可以访问到Excel文件,但是还不能真正的操纵Excel文件,本文将给大家一个惊喜,向大家介绍一个开放源码项目,Java Excel API,使用它大家就可以方便地操纵Excel文件了。

  Java Excel API简介

  Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。

  现在发布的稳定版本是V2.0,提供以下功能:

   从Excel 95、97、2000等格式的文件中读取数据;
   读取Excel公式(可以读取Excel 97以后的公式);
   生成Excel数据表(格式为Excel 97);
   支持字体、数字、日期的格式化;
   支持单元格的阴影操作,以及颜色操作;
   修改已经存在的数据表;

  现在还不支持以下功能,但不久就会提供了:

   不能够读取图表信息;
   可以读,但是不能生成公式,任何类型公式最后的计算值都可以读出;
 
   应用示例

  1、从Excel文件读取数据表

  Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java)

import java.io.*;
import jxl.*;
… … … …
try
{
//构建Workbook对象, 只读Workbook对象
//直接从本地文件创建Workbook
//从输入流创建Workbook
InputStream is = new FileInputStream(sourcefile);
jxl.Workbook rwb = Workbook.getWorkbook(is);
}
catch (Exception e)
{
e.printStackTrace();
}

  一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。参考下面的代码片段:

//获取第一张Sheet表
Sheet rs = rwb.getSheet(0);

  我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。

  一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。参考下面的代码片段:

//获取第一行,第一列的值
Cell c00 = rs.getCell(0, 0);
String strc00 = c00.getContents();

//获取第一行,第二列的值
Cell c10 = rs.getCell(1, 0);
String strc10 = c10.getContents();

//获取第二行,第二列的值
Cell c11 = rs.getCell(1, 1);
String strc11 = c11.getContents();

System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());

  如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。

  如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。参考下面的代码片段:

String strc00 = null;
double strc10 = 0.00;
Date strc11 = null;

Cell c00 = rs.getCell(0, 0);
Cell c10 = rs.getCell(1, 0);
Cell c11 = rs.getCell(1, 1);

if(c00.getType() == CellType.LABEL)
{
LabelCell labelc00 = (LabelCell)c00;
strc00 = labelc00.getString();
}
if(c10.getType() == CellType.NUMBER)
{
NmberCell numc10 = (NumberCell)c10;
strc10 = numc10.getvalue();
}
if(c11.getType() == CellType.DATE)
{
DateCell datec11 = (DateCell)c11;
strc11 = datec11.getDate();
}

System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());

  在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:

  每种类型的具体意义,请参见Java Excel API document.

  当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。参考如下代码片段:

//操作完成时,关闭对象,释放占用的内存空间
rwb.close();

  Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介绍几个常用的方法,其它的方法请参考附录中的Java Excel API document.

Workbook类提供的方法

  1. int getNumberOfSheets()

  获得工作薄(Workbook)中工作表(Sheet)的个数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
int sheets = rwb.getNumberOfSheets();

  2. Sheet[] getSheets()

  返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
Sheet[] sheets = rwb.getSheets();

  3. String getVersion()

  返回正在使用的API的版本号,好像是没什么太大的作用。

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
String apiVersion = rwb.getVersion();

  Sheet接口提供的方法

  1) String getName()

  获取Sheet的名称,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
String sheetName = rs.getName();

  2) int getColumns()

  获取Sheet表中所包含的总列数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsColumns = rs.getColumns();

  3) Cell[] getColumn(int column)

  获取某一列的所有单元格,返回的是单元格对象数组,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getColumn(0);

  4) int getRows()

  获取Sheet表中所包含的总行数,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
int rsRows = rs.getRows();

  5) Cell[] getRow(int row)

  获取某一行的所有单元格,返回的是单元格对象数组,示例子:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell[] cell = rs.getRow(0);

  6) Cell getCell(int column, int row)

  获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同。

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));
jxl.Sheet rs = rwb.getSheet(0);
Cell cell = rs.getCell(0, 0);

  2、生成新的Excel工作薄

  下面的代码主要是向大家介绍如何生成简单的Excel工作表,在这里单元格的内容是不带任何修饰的(如:字体,颜色等等),所有的内容都作为字符串写入。(完整代码见ExcelWriting.java)

  与读取Excel工作表相似,首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象,这里要注意的是,只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,因为类WritableWorkbook的构造函数为protected类型。示例代码片段如下:

import java.io.*;
import jxl.*;
import jxl.write.*;
… … … …
try
{
//构建Workbook对象, 只读Workbook对象
//Method 1:创建可写入的Excel工作薄
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));

//Method 2:将WritableWorkbook直接写入到输出流
/*
OutputStream os = new FileOutputStream(targetfile);
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);
*/
}
catch (Exception e)
{
e.printStackTrace();
}

  API提供了两种方式来处理可写入的输出流,一种是直接生成本地文件,如果文件名不带全路径的话,缺省的文件会定位在当前目录,如果文件名带有全路径的话,则生成的Excel文件则会定位在相应的目录;另外一种是将Excel对象直接写入到输出流,例如:用户通过浏览器来访问Web服务器,如果HTTP头设置正确的话,浏览器自动调用客户端的Excel应用程序,来显示动态生成的Excel电子表格。

  接下来就是要创建工作表,创建工作表的方法与创建工作薄的方法几乎一样,同样是通过工厂模式方法获得相应的对象,该方法需要两个参数,一个是工作表的名称,另一个是工作表在工作薄中的位置,参考下面的代码片段:

//创建Excel工作表
jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);

"这锅也支好了,材料也准备齐全了,可以开始下锅了!",现在要做的只是实例化API所提供的Excel基本数据类型,并将它们添加到工作表中就可以了,参考下面的代码片段:
//1.添加Label对象
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");
ws.addCell(labelC);

//添加带有字型Formatting的对象
jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF);
ws.addCell(labelCF);

//添加带有字体颜色Formatting的对象
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,
Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
jxl.write.Label labelCFC = new jxl.write.Label(1, 0, "This is a Label Cell", wcfFC);
ws.addCell(labelCF);

//2.添加Number对象
jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);
ws.addCell(labelN);

//添加带有formatting的Number对象
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);

//3.添加Boolean对象
jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);

//4.添加DateTime对象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);

//添加带有formatting的DateFormat对象
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);

  这里有两点大家要引起大家的注意。第一点,在构造单元格时,单元格在工作表中的位置就已经确定了。一旦创建后,单元格的位置是不能够变更的,尽管单元格的内容是可以改变的。第二点,单元格的定位是按照下面这样的规律(column, row),而且下标都是从0开始,例如,A1被存储在(0, 0),B1被存储在(1, 0)。

  最后,不要忘记关闭打开的Excel工作薄对象,以释放占用的内存,参见下面的代码片段:

//写入Exel工作表
wwb.write();

//关闭Excel工作薄对象
wwb.close();

  这可能与读取Excel文件的操作有少少不同,在关闭Excel对象之前,你必须要先调用write()方法,因为先前的操作都是存储在缓存中的,所以要通过该方法将操作的内容保存在文件中。如果你先关闭了Excel对象,那么只能得到一张空的工作薄了。

  3、拷贝、更新Excel工作薄

  接下来简要介绍一下如何更新一个已经存在的工作薄,主要是下面二步操作,第一步是构造只读的Excel工作薄,第二步是利用已经创建的Excel工作薄创建新的可写入的Excel工作薄,参考下面的代码片段:(完整代码见ExcelModifying.java)

//创建只读的Excel工作薄的对象
jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));

//创建可写入的Excel工作薄对象
jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile), rw);

//读取第一张工作表
jxl.write.WritableSheet ws = wwb.getSheet(0);

//获得第一个单元格对象
jxl.write.WritableCell wc = ws.getWritableCell(0, 0);

//判断单元格的类型, 做出相应的转化
if(wc.getType() == CellType.LABEL)
{
Label l = (Label)wc;
l.setString("The value has been modified.");
}

//写入Excel对象
wwb.write();

//关闭可写入的Excel对象
wwb.close();

//关闭只读的Excel对象
rw.close();

  之所以使用这种方式构建Excel对象,完全是因为效率的原因,因为上面的示例才是API的主要应用。为了提高性能,在读取工作表时,与数据相关的一些输出信息,所有的格式信息,如:字体、颜色等等,是不被处理的,因为我们的目的是获得行数据的值,既使没有了修饰,也不会对行数据的值产生什么影响。唯一的不利之处就是,在内存中会同时保存两个同样的工作表,这样当工作表体积比较大时,会占用相当大的内存,但现在好像内存的大小并不是什么关键因素了。

  一旦获得了可写入的工作表对象,我们就可以对单元格对象进行更新的操作了,在这里我们不必调用API提供的add()方法,因为单元格已经于工作表当中,所以我们只需要调用相应的setXXX()方法,就可以完成更新的操作了。

  尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,以使单元格的内容以不同的形式表现。

  新生成的工作表对象是可写入的,我们除了更新原有的单元格外,还可以添加新的单元格到工作表中,这与示例2的操作是完全一样的。

  最后,不要忘记调用write()方法,将更新的内容写入到文件中,然后关闭工作薄对象,这里有两个工作薄对象要关闭,一个是只读的,另外一个是可写入的。

- 作者: pegasus827 2009年02月14日, 星期六 14:28  回复(0) |  引用(0) 加入博采

mysql 5.0存储过程学习总结转载

一.创建存储过程

1.基本语法:

create procedure sp_name()
begin
.........
end

2.参数传递

二.调用存储过程

1.基本语法:call sp_name()
注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递

三.删除存储过程

1.基本语法:
drop procedure sp_name//

2.注意事项
(1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程

四.区块,条件,循环

1.区块定义,常用
begin
......
end;
也可以给区块起别名,如:
lable:begin
...........
end lable;
可以用leave lable;跳出区块,执行区块以后的代码

2.条件语句

以下为引用的内容:
if 条件 then
statement
else
statement
end if;


3.循环语句

(1).while循环

以下为引用的内容:
[label:] WHILE expression DO
statements

END WHILE [label] ;
 


(2).loop循环

以下为引用的内容:

[label:] LOOP

statements

END LOOP [label];
 


(3).repeat until循环

以下为引用的内容:

[label:] REPEAT

statements

UNTIL expression

END REPEAT [label] ;
 


五.其他常用命令

1.show procedure status
显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等

2.show create procedure sp_name
显示某一个存储过程的详细信息

- 作者: pegasus827 2009年02月13日, 星期五 11:30  回复(0) |  引用(0) 加入博采

黄泉路上开的花--彼岸花

蔓珠莎华,又称彼岸花,引魂之花—彼岸花
­
彼岸花,恶魔的温柔。传说中自愿投入地狱的花朵,被众魔遣回,但仍徘徊于黄泉路上,众魔不忍,遂同意让她开在此路上,给离开人界的魂们一个指引与安慰
­
相传此花只开于黄泉,一般认为是只开在冥界三途河边、忘川彼岸的接引之花。花如血一样绚烂鲜红,且有花无叶,是冥界唯一的花。
­
花香传说有魔力,能唤起死者生前的记忆。在黄泉路上大批大批的开着这花,远远看上去就像是血所铺成的地毯, 又因其红得似火而被喻为”火照之路”,也是这长长黄泉路上唯一的风景与色彩。当灵魂渡过忘川,便忘却生前的种种,曾经的一切都留在了彼岸,往生者就踏着这花的指引通向幽冥之狱。
­
彼岸花花开时看不到叶子,有叶子时看不到花,花叶两不相见,生生相错。因此才有“彼岸花,开彼岸,只见花,不见叶”的说法。春天是球根,夏天生长叶子,秋天立起开花,冬天叶子又慢慢退去,花开时看不到叶子,有叶子时看不到花,花叶两不相见,生生相错。相念相惜永相失。如此轮回而花叶永不相见,也有着永远无法相会的悲恋之意。
在民间,春分前后三天叫春彼岸,秋分前后三天叫秋彼岸。是上坟的日子。
­
彼岸花开在秋彼岸期间,非常准时,所以才叫彼岸花。
­
而它生长的地方大多在田间小道,河边步道和墓地,所以别名也叫做死人花。
­
一到秋天,就绽放出妖异浓艳得近于红黑色的花朵,整片的彼岸花看上去
便是触目惊心的赤红,如火,如血,如荼。
­
曼珠沙华这个名字出自梵语「摩诃曼珠沙华」,原意为天上之花,大红花,天降吉兆四华之一。佛典中也说曼珠沙华(曼殊沙华)是天上开的花,白色而柔软,见此花者,恶自去除。
­
佛家语,荼蘼是花季最后盛开的花,开到荼蘼花事了,只剩下开在遗忘前生的彼岸的花。
­
“彼岸花,开一千年,落一千年,花叶永不相见。情不为因果,缘注定生死。”
­
蔓珠莎华的美,是妖异、灾难、死亡与分离的不祥之美。或者是因为它深艳鲜红的色泽让人联想到血,也或者是因为它的鳞茎含有剧毒,在一般的文学作品中,它的形象通常是与“疯狂、血腥”之类的概念相联系起来的。
­
传说,很久很久以前,城市的边缘开满了大片大片的彼岸华,也就是曼珠沙华。它的花香有一种魔力,可以让人想起自己前世的事情。
­
   守护彼岸花的是两个妖精,一个花妖叫曼珠,一个是叶妖叫沙华。
­
   他们守候了几千年的彼岸花,可是从来没有见过面,因为花开的时候,花开时看不到叶子,有叶子时看不到花,花叶两不相见,生生相错。
­
  他们疯狂地想念着彼此,并被这种痛苦折磨着。
­
   终于有一天,他们决定违背神的规定偷偷地见一次面。
­
    那一年的曼珠沙华红艳艳的花被惹眼的绿色衬托着,开得格外妖冶美丽。
­
   神怪罪下来,这也是意料之中的。
­
   曼珠和沙华被打入轮回,并被诅咒永远也不能在一起,生生世世在人间受到磨难。
­
   从那以后,蔓珠沙华又叫做彼岸花,意思是开放在天国的花,花的形状像一只只在向天堂祈祷的手掌,可是再也没有在城市出现过。
­
   这种花是开在黄泉路上的,曼珠和沙华每一次转世在黄泉路上闻到彼岸花的香味就能想起前世的自己,然后发誓不分开,在下一世再跌入诅咒的轮回。

- 作者: pegasus827 2009年02月11日, 星期三 13:53  回复(0) |  引用(0) 加入博采

昙花一现为谁开
  昙花原是一位花神,她每天都开花,四季都灿烂。她还爱上了每天给她浇水除草的年轻人。后来此事给玉帝得知,玉帝于是大发雷霆要拆散鸳鸯。玉帝将花神抓了起来,把她贬为每年只能开一瞬间的昙花,不让她再和情郎相见,还把那年轻人送去灵鹫山出家,赐名韦陀,让他忘记前尘,忘记花神。


  多年过去了,韦陀果真忘了花神,潜心习佛,渐有所成。而花神却怎么也忘不了那个曾经照顾她的小伙子。她知道每年暮春时分,韦陀总要下山来为佛祖采集朝露煎茶。所以昙花就选择在那个时候开放。她把集聚了整整一年的精气绽放在那一瞬间。她希望韦陀能回头看她一眼,能记起她。可是千百年过去了,韦陀一年年的下山来采集朝露。昙花一年年的默默绽放。韦陀始终没有记起她。
昙花一现,只为韦陀。所以昙花又名韦陀花。

- 作者: pegasus827 2009年02月11日, 星期三 13:51  回复(0) |  引用(0) 加入博采

班、排、连、营、团、旅、师、军、集团军人数

班:10人
排:30人
连:100人
营:300人
团:1000人
旅:3000人
师:10000人
军:30000人
集团军:100000-200000人
有个别班、排、连、营、团、旅、师、军、集团军的人数不同人数会多会少些。
钢七连 钢七连 钢七连 钢七连

- 作者: pegasus827 2009年02月7日, 星期六 11:27  回复(0) |  引用(0) 加入博采

日本主要娱乐网站 转载
インターネットTVガイド
http://www.tvguide.or.jp/cgi-bin/top.cgi

ON TV JAPAN
http://www.ontvjapan.com/

日テレ・ホームページ
[url=http://www.ntv.co.jp/]http://www.ntv.co.jp/
[/url]
NHKオンライン
[url=http://www.nhk.or.jp/]http://www.nhk.or.jp/
[/url]
TBS INTERNET
[url=http://www.tbs.co.jp/]http://www.tbs.co.jp/
[/url]
テレビ朝日
[url=http://www.tv-asahi.co.jp/]http://www.tv-asahi.co.jp/
[/url]
テレビ東京
[url=http://www.tv-tokyo.co.jp/]http://www.tv-tokyo.co.jp/
[/url]
フジテレビ
[url=http://www.fujitv.co.jp/]http://www.fujitv.co.jp/
[/url]
SKY Perfec TV!
[url=http://www.skyperfectv.co.jp/]http://www.skyperfectv.co.jp/
[/url]
WOWOW
[url=http://www.wowow.co.jp/]http://www.wowow.co.jp/
[/url]
ビデオリサーチ
[url=http://www.videor.co.jp/]http://www.videor.co.jp/
[/url]

テレビドラマデータベース
[url=http://www.tvdrama-db.com/]http://www.tvdrama-db.com/
[/url]

TVCM博物館
[url=http://www.action-net.com/]http://www.action-net.com/
[/url]

BOOK REVIEW GUIDE
[url=http://www.honn.co.jp/]http://www.honn.co.jp/
[/url]
WSG NET
[url=http://www.wsg.ne.jp/]http://www.wsg.ne.jp/
[/url]

avex
http://cavex.avexnet.or.jp/
HMV
[url=http://www.hmv.co.jp/]http://www.hmv.co.jp/
[/url]
Listen Japan
[url=http://www.listen.co.jp/]http://www.listen.co.jp/
[/url]
PONY CANYON
[url=http://www.ponycanyon.co.jp/]http://www.ponycanyon.co.jp/
[/url]

Sony Music
[url=http://www.sme.co.jp/]http://www.sme.co.jp/
[/url]

SHINSEIDO
http://www.shinseido.co.jp/

TOSHIBA EMI
http://www.toshiba-emi.co.jp/

TOY'S FACTORY
http://www.toysfactory.co.jp/

TSUTAYA online
http://www.tsutaya.co.jp/

Universal J
http://www.universal-music.co.jp/universalj/

WARNER MUSIC JAPAN
http://www.wmg.jp/

@TOWER.JP
http://www.towerrecords.co.jp/

@Victor Entertainment
http://www.jvcmusic.co.jp/

オリコン
http://www.oricon.co.jp/

日本クラウン
http://www.crownrecord.co.jp/


@CINEMACAFE.NET
[url=http://www.cinemacafe.net/]http://www.cinemacafe.net/
[/url]
eiga.com
[url=http://www.eiga.com/]http://www.eiga.com/
[/url]
PREMIERE
[url=http://www.elle.co.jp/premiere/]http://www.elle.co.jp/premiere/
[/url]
シネマスクランブル
[url=http://cinesc.cplaza.ne.jp/]http://cinesc.cplaza.ne.jp/
[/url]

映画大好き!
[url=http://www.cinemanavi.co.jp/]http://www.cinemanavi.co.jp/
[/url]

mediage
http://www.mediage.jp/

WARNER MYCAL CINEMAS
http://www.warnermycal.com/

GAGA COMMUNICATIONS
http://www.gaga.co.jp/

Sony pictures
http://www.spe.co.jp/

Universal Studios
http://www.universalstudios.com/

Walt Disney Studios
http://disney.go.com/StudioOperations/

20th century FOX
http://www.foxjapan.com/movies/

松竹
http://www.shochiku.co.jp/

東映
http://www.toei.co.jp/

日本ヘラルド
http://www.herald.co.jp/

ワーナーブラザーズ
http://www.warnerbros.co.jp/

- 作者: pegasus827 2009年01月13日, 星期二 14:45  回复(0) |  引用(0) 加入博采

国外论坛汇总转载

国外顶尖论坛汇总

以下汇总了11个与blogging相关的国外顶尖论坛,你可以从这些论坛中获得大量新鲜资讯,以及外国blogger的最新动态。特别是对于那些和我一样 经常翻译和学习国外blogging技术的博友,这将是很不错的资源,在这里和大家分享以下^.^ 括号内是这个论坛的主要话题

1. Bloggerforum (all about blogging)

2. Digital Point (blogging,seo,making money online)

3. SitePoint (blog ,website)

4. Coding Forums (php,css,xml,MySQL,ASP )

5. Bloggeries (blogging)

6 Authority Blogger (communicate blogging skills)

7. Wordpress forum (wordpress,code)

8. WebmasterWorld (search engine,seo)

9. cre8asiteforums (design,code)

10. TBE Blog Forum (blogging skills)

11. Blogcrowds Blog Forum (blog,design,seo)

这里推荐几个国外娱乐论坛,上网上的太多,难免感到劳累,所以,去娱乐论坛混一混还是不错的,能够缓解一下疲惫的心理!

http://www.topix.com/forum/entertainment

http://forums.digitalpoint.com/forumdisplay.php?f=97

http://www.mlive.com/forums/entertainment/

http://www.redcafe.net/f27/


这里推荐几个国外图片论坛!

http://forum.imagejournal.org/

http://forum.blueharvest.net/images/

http://www.imgforum.com/

http://www.imgresidency.com/Forum.html

http://www.newmediamedicine.com/forum/img-forum/

- 作者: pegasus827 2009年01月12日, 星期一 11:44  回复(0) |  引用(0) 加入博采

java连接mysql数据库的bean类

package pegasus;
import java.sql.*;
//import java.util.*;
//import java.io.*;
//import java.text.*;
public class dbcontrol {
String DBDriver = "org.gjt.mm.mysql.Driver";
String ConnStr = "jdbc:mysql://localhost:3306/netmend?user=xxx&password=xxx&useUnicode=true&characterEncoding=GB2312";
Connection conn = null;
Statement stmt=null;
ResultSet rs = null;
public dbcontrol(){
try{
Class.forName(DBDriver);
//加载数据库驱动程序
     }
catch(Exception e) {
System.err.println("MySQLconn(): "+e.getMessage());
                                          }
                }
public ResultSet executeQuery(String sql){
//以记录集为返回值的函数
rs = null;
try {
conn = DriverManager.getConnection(ConnStr);
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
//与DBMS建立链接
rs = stmt.executeQuery(sql);
return rs;
}
catch(SQLException ex) {
System.err.println("aq.executeQuery:"+ex.getMessage());
return rs;     //也得有个返回
                       }
}

public void executeUpdate(String sql){
try{
 conn = DriverManager.getConnection(ConnStr);
  stmt = conn.createStatement();
//与DBMS建立链接
  stmt.executeUpdate(sql);
 }
catch(SQLException em) {
System.err.println("aq.executeQuery:"+em.getMessage());
                       } 
 
}


public void closeDB(){
          try{
            if(rs!=null)
            {
            rs.close();
            rs=null;
            }
            if(stmt!=null)
            {
            stmt.close();
            stmt=null;
            }
            if(conn!=null)
            {
            conn.close();
            conn=null;
            }
                }
         catch(Exception ex) {
          System.err.println("aq.executeQuery:"+ex.getMessage());
                                 }             
                     }

}


反编译出来的代码,有缺失的,在关闭部分小白后改了,在 close后加了指空

印象中仅close,有时会出现close_wait状态释放不掉的情况。

Class和DriverManager都是很暴力,可以不声明直接调用方法的东西,其他没什么好说的。

- 作者: pegasus827 2009年01月12日, 星期一 10:32  回复(0) |  引用(0) 加入博采

调用存储过程资料 转载
CallableStatement 对象为所有的 DBMS 提供了一种以标准形式调用已储存过程的方法。已储存过程储存在数据库中。对已储存过程的调用是 CallableStatement对象所含的内容。这种调用是用一种换码语法来写的,有两种形式:一种形式带结果参,另一种形式不带结果参数。结果参数是一种输出 (OUT) 参数,是已储存过程的返回值。两种形式都可带有数量可变的输入(IN 参数)、输出(OUT 参数)或输入和输出(INOUT 参数)的参数。问号将用作参数的占位符。



 在 JDBC 中调用已储存过程的语法如下所示。注意,方括号表示其间的内容是可选项;方括号本身并非语法的组成部份。

{call 过程名[(?, ?, ...)]}

  返回结果参数的过程的语法为:

{? = call 过程名[(?, ?, ...)]}

  不带参数的已储存过程的语法类似:

{call 过程名}

  通常,创建 CallableStatement 对象的人应当知道所用的 DBMS 是支持已储存过程的,并且知道这些过程都是些什么。然而,如果需要检查,多种DatabaseMetaData 方法都可以提供这样的信息。例如,如果 DBMS 支持已储存过程的调用,则supportsStoredProcedures 方法将返回 true,而getProcedures 方法将返回对已储存过程的描述。CallableStatement 继承 Statement 的方法(它们用于处理一般的 SQL 语句),还继承了 PreparedStatement 的方法(它们用于处理 IN 参)。

  CallableStatement 中定义的所有方法都用于处理 OUT 参数或 INOUT 参数的输出部分:注册 OUT 参数的 JDBC 类型(一般 SQL 类型)、从这些参数中检索结果,或者检查所返回的值是否为 JDBC NULL。

1、创建 CallableStatement 对象

  CallableStatement 对象是用 Connection 方法 prepareCall 创建的。下例创建 CallableStatement 的实例,其中含有对已储存过程 getTestData 调用。该过程有两个变量,但不含结果参数:

CallableStatement cstmt = con.prepareCall("{call getTestData(?, ?)}");

  其中?占位符为IN、OUT还是INOUT参数,取决于已储存过程getTestData。

2、IN和OUT参数

  将IN参数传给 CallableStatement 对象是通过 setXXX 方法完成的。该方法继承自 PreparedStatement。所传入参数的类型决定了所用的setXXX方法(例如,用 setFloat 来传入 float 值等)。

  如果已储存过程返回 OUT 参数,则在执行 CallableStatement 对象以前必须先注册每个 OUT 参数的 JDBC 类型(这是必需的,因为某些 DBMS 要求 JDBC 类型)。注册 JDBC 类型是用 registerOutParameter 方法来完成的。语句执行完后,CallableStatement 的 getXXX 方法将取回参数值。正确的 getXXX 方法是为各参数所注册的 JDBC 类型所对应的 Java 类型。换言之, registerOutParameter 使用的是 JDBC 类型(因此它与数据库返回的 JDBC 类型匹配),而 getXXX 将之转换为 Java 类型。

  作为示例,下述代码先注册 OUT 参数,执行由 cstmt 所调用的已储存过程,然后检索在 OUT 参数中返回的值。方法 getByte 从第一个 OUT 参数中取出一个 Java 字节,而 getBigDecimal 从第二个 OUT 参数中取出一个 BigDecimal 对象(小数点后面带三位数):

CallableStatement cstmt = con.prepareCall("{call getTestData(?, ?)}");

cstmt.registerOutParameter(1, java.sql.Types.TINYINT);

cstmt.registerOutParameter(2, java.sql.Types.DECIMAL, 3);

cstmt.executeQuery();

byte x = cstmt.getByte(1);

java.math.BigDecimal n = cstmt.getBigDecimal(2, 3);



  CallableStatement 与 ResultSet 不同,它不提供用增量方式检索大 OUT 值的特殊机制。



3、INOUT参数

  既支持输入又接受输出的参数(INOUT 参数)除了调用 registerOutParameter 方法外,还要求调用适当的 setXXX 方法(该方法是从 PreparedStatement 继承来的)。setXXX 方法将参数值设置为输入参数,而 registerOutParameter 方法将它的 JDBC 类型注册为输出参数。setXXX 方法提供一个 Java 值,而驱动程序先把这个值转换为 JDBC 值,然后将它送到数据库中。这种 IN 值的 JDBC 类型和提供给 registerOutParameter 方法的 JDBC 类型应该相同。然后,要检索输出值,就要用对应的 getXXX 方法。例如,Java 类型为byte 的参数应该使用方法 setByte 来赋输入值。应该给registerOutParameter 提供类型为 TINYINT 的 JDBC 类型,同时应使用 getByte 来检索输出值。

  下例假设有一个已储存过程 reviseTotal,其唯一参数是 INOUT 参数。方法setByte 把此参数设为 25,驱动程序将把它作为 JDBC TINYINT 类型送到数据库中。接着,registerOutParameter 将该参数注册为 JDBC TINYINT。执行完该已储存过程后,将返回一个新的 JDBC TINYINT 值。方法 getByte 将把这个新值作为 Java byte 类型检索。

CallableStatement cstmt = con.prepareCall("{call reviseTotal(?)}");

cstmt.setByte(1, 25);

cstmt.registerOutParameter(1, java.sql.Types.TINYINT);

cstmt.executeUpdate();

byte x = cstmt.getByte(1);



4、先检索结果,再检索 OUT 参数



  由于某些 DBMS 的限制,为了实现最大的可移植性,建议先检索由执行CallableStatement 对象所产生的结果,然后再用 CallableStatement.getXXX 方法来检索 OUT 参数。如果 CallableStatement 对象返回多个 ResultSet 对象(通过调用 execute 方法),在检索 OUT 参数前应先检索所有的结果。这种情况下,为确保对所有的结果都进行了访问,必须对 Statement 方法 getResultSet、getUpdateCount 和getMoreResults 进行调用,直到不再有结果为止。



  检索完所有的结果后,就可用 CallableStatement.getXXX 方法来检索 OUT 参数中的值。



5、检索作为OUT参数的NULL值



返回到 OUT 参数中的值可能会是JDBC NULL。当出现这种情形时,将对 JDBC NULL 值进行转换以使 getXXX 方法所返回的值为 null、0 或 false,这取决于getXXX 方法类型。对于 ResultSet 对象,要知道0或false是否源于JDBCNULL的唯一方法,是用方法wasNull进行检测。如果 getXXX 方法读取的最后一个值是 JDBC NULL,则该方法返回 true,否则返回 flase。

- 作者: pegasus827 2009年01月12日, 星期一 10:01  回复(0) |  引用(0) 加入博采

jsp调用MYSQL存储过程例子 转载

MYSQLDELIMITER $$DROP PROCEDURE IF EXISTS `freewap`.`add_user` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `add_user`(
IN name TEXT,
         IN pwd TEXT,
         IN email TEXT,
IN qq TEXT,
   IN birthday DATE,
   IN sex tinyint,
IN pwdquestion TEXT,
IN pwdanswer TEXT,
IN firstpwd TEXT
)
BEGIN
     INSERT INTO `tbl_user`(u_name, u_pwd, u_email, u_qq, u_birthday, u_sex, u_pwdquestion, u_pwdanswer, u_firstpwd)
     VALUES (name,pwd,email,qq,birthday,sex,pwdquestion,pwdanswer,firstpwd);
   END $$DELIMITER ;JSP代码片断:private   CallableStatement cStmt = null;//调用存储过程查询,需要返回查询结果
public ResultSet callQuery (String proc)
{
   rs=null;
   try{
       cStmt=conn.prepareCall("CALL "+proc +";",ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
       rs=cStmt.executeQuery();
   }
   catch (SQLException ex)
   {
    System.err.println("DAO.DBBean.executeQuery() ERR :"+ex.getMessage());
   }
   return rs;
}

//调用存储过程更新,不需要返回
public void callUpdate (String proc)
{
   rs=null;
   stmt=null;
   try{
    System.out.println("{CALL "+proc+"}");
    cStmt=conn.prepareCall("{CALL "+proc+"}");
    cStmt.execute();
   }
   catch (SQLException ex)
   {
    System.err.println("DAO.DBBean.callUpdate() ERR :"+ex.getMessage());
   }
}//插入数据。添加用户,在注册时使用
public void addUser(UserBean user) throws SQLException {
   DBBean dbbean = new   DBBean();
   dbbean.openConn();
   try
      {
    StringBuffer sql = new StringBuffer();
        sql = new StringBuffer("add_user(");
        sql.append("'" + user.getU_name() + "',");
        StrEncrypt strencrypt=new StrEncrypt();
        sql.append("'" + strencrypt.EncryptStr(user.getU_pwd()) + "',");
        sql.append("'" + user.getU_email() + "',");
        sql.append("'" + user.getU_qq() + "',");
        sql.append("'" + new java.sql.Date(user.getU_birthday().getTime()) + "',");
        sql.append("" + user.getU_sex() + ",");
        sql.append("'" + user.getU_pwdquestion() + "',");
        sql.append("'" + user.getU_pwdanswer() + "',");
        sql.append("'" + user.getU_pwd() + "'");
        sql.append(")");
        dbbean.callUpdate(sql.toString());
      }
      catch (Exception sqle)
      {
          sqle.printStackTrace();
      }
      finally
      {
       dbbean.closeCall();
      }
    }

- 作者: pegasus827 2009年01月12日, 星期一 09:53  回复(0) |  引用(0) 加入博采