﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-我的空间,写我所写,禅我所藏</title><link>http://www.blogjava.net/imcb/</link><description>与我一起遨游吧</description><language>zh-cn</language><lastBuildDate>Thu, 16 Apr 2026 23:17:39 GMT</lastBuildDate><pubDate>Thu, 16 Apr 2026 23:17:39 GMT</pubDate><ttl>60</ttl><item><title>POI 简介及简单应用</title><link>http://www.blogjava.net/imcb/archive/2007/07/04/128208.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Wed, 04 Jul 2007 15:22:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/07/04/128208.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/128208.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/07/04/128208.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/128208.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/128208.html</trackback:ping><description><![CDATA[由于项目需要从EXCEL文件中导入数据,所以这几天上网收集了一下这方面的资料!<br><br>于是找到了POI这个玩意,本来想用JXL的,但了解到它对处理数据量大的时候,效率不行!.于是选择了POI!<br><br>要求:JDK&nbsp;1.4+POI开发包<br><br>可以到&nbsp;<a href="http://www.apache.org/dyn/closer.cgi/jakarta/poi/" target=_blank><u><font color=#800080>http://www.apache.org/dyn/closer.cgi/jakarta/poi/</font></u></a>&nbsp;下载<br><br><strong>Jakarta&nbsp;POI</strong><br><br>Jakarta&nbsp;POI可以让你使用Java来读写MS&nbsp;Excel&nbsp;,Word文件&nbsp;&nbsp;<br><br><strong>相关文档</strong><br><br>官方网站:&nbsp;<a href="http://jakarta.apache.org/poi/" target=_blank><u><font color=#0000ff>http://jakarta.apache.org/poi/</font></u></a>&nbsp;<br><a href="http://www.matrix.org.cn/down_view.asp?id=14" target=_blank><u><font color=#800080>http://www.matrix.org.cn/down_view.asp?id=14</font></u></a>&nbsp;<br><br><br>www.matrix.org.cn上的东西一向很不错!!<br><br><br><br><strong>创建Excel&nbsp;文档</strong><br><br>　　示例1将演示如何利用Jakarta&nbsp;POI&nbsp;API&nbsp;创建Excel&nbsp;文档。&nbsp;<br><br>　　示例1程序如下：<br><br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFWorkbook;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFSheet;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFRow;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFCell;<br>import&nbsp;java.io.FileOutputStream;<br>public&nbsp;class&nbsp;CreateXL&nbsp;{<br><br>　/**&nbsp;Excel&nbsp;文件要存放的位置，假定在D盘下*/<br><br>　public&nbsp;static&nbsp;String&nbsp;outputFile="D:\\test.xls";<br><br>　public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;argv[]){<br><br>　try{<br><br>　　//&nbsp;创建新的Excel&nbsp;工作簿<br><br>　　HSSFWorkbook&nbsp;workbook&nbsp;=&nbsp;new&nbsp;HSSFWorkbook();<br><br>　　//&nbsp;在Excel工作簿中建一工作表，其名为缺省值<br>　　　　　　//&nbsp;如要新建一名为"效益指标"的工作表，其语句为：<br>　　　　　　//&nbsp;HSSFSheet&nbsp;sheet&nbsp;=&nbsp;workbook.createSheet("效益指标");<br><br>　　HSSFSheet&nbsp;sheet&nbsp;=&nbsp;workbook.createSheet();<br><br>　　//&nbsp;在索引0的位置创建行（最顶端的行）<br><br>　　HSSFRow&nbsp;row&nbsp;=&nbsp;sheet.createRow((short)0);<br><br>　　//在索引0的位置创建单元格（左上端）<br>　　HSSFCell&nbsp;cell&nbsp;=&nbsp;row.createCell((short)&nbsp;0);<br>　　//&nbsp;定义单元格为字符串类型<br>　　cell.setCellType(HSSFCell.CELL_TYPE_STRING);<br>　　//&nbsp;在单元格中输入一些内容<br>　　cell.setCellValue("增加值");<br>　　//&nbsp;新建一输出文件流<br>　　FileOutputStream&nbsp;fOut&nbsp;=&nbsp;new&nbsp;FileOutputStream(outputFile);<br>　　//&nbsp;把相应的Excel&nbsp;工作簿存盘<br>　　workbook.write(fOut);<br>　　fOut.flush();<br>　　//&nbsp;操作结束，关闭文件<br>　　fOut.close();<br>　　System.out.println("文件生成...");<br><br>　}catch(Exception&nbsp;e)&nbsp;{<br>　　System.out.println("已运行&nbsp;xlCreate()&nbsp;:&nbsp;"&nbsp;+&nbsp;e&nbsp;);<br>　}<br>}<br>}<br>　　<br><br><strong>读取Excel文档中的数据</strong><br><br>　　示例2将演示如何读取Excel文档中的数据。假定在D盘JTest目录下有一个文件名为test1.xls的Excel文件。<br><br>示例2程序如下：<br><br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFWorkbook;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFSheet;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFRow;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFCell;<br>import&nbsp;java.io.FileInputStream;<br>public&nbsp;class&nbsp;ReadXL&nbsp;{<br>　/**&nbsp;Excel文件的存放位置。注意是正斜线*/<br>　public&nbsp;static&nbsp;String&nbsp;fileToBeRead="D:\\test1.xls";<br>　public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;argv[]){&nbsp;<br>　try{<br>　　//&nbsp;创建对Excel工作簿文件的引用<br>　　HSSFWorkbook&nbsp;workbook&nbsp;=&nbsp;new&nbsp;HSSFWorkbook(new&nbsp;FileInputStream(fileToBeRead));<br>　　//&nbsp;创建对工作表的引用。<br>　　//&nbsp;本例是按名引用（让我们假定那张表有着缺省名"Sheet1"）<br>　　HSSFSheet&nbsp;sheet&nbsp;=&nbsp;workbook.getSheet("Sheet1");<br>　　//&nbsp;也可用getSheetAt(int&nbsp;index)按索引引用，<br>　　//&nbsp;在Excel文档中，第一张工作表的缺省索引是0，<br>　　//&nbsp;其语句为：HSSFSheet&nbsp;sheet&nbsp;=&nbsp;workbook.getSheetAt(0);<br>　　//&nbsp;读取左上端单元<br>　　HSSFRow&nbsp;row&nbsp;=&nbsp;sheet.getRow(0);<br>　　HSSFCell&nbsp;cell&nbsp;=&nbsp;row.getCell((short)0);<br>　　//&nbsp;输出单元内容，cell.getStringCellValue()就是取所在单元的值<br>　　System.out.println("左上端单元是：&nbsp;"&nbsp;+&nbsp;cell.getStringCellValue());&nbsp;<br>　}catch(Exception&nbsp;e)&nbsp;{<br>　　System.out.println("已运行xlRead()&nbsp;:&nbsp;"&nbsp;+&nbsp;e&nbsp;);<br>　}<br>}<br>}<br>　　设置单元格格式<br><br>　　在这里，我们将只介绍一些和格式设置有关的语句，我们假定workbook就是对一个工作簿的引用。在Java中，第一步要做的就是创建和设置字体和单元格的格式，然后再应用这些格式：<br><br>　　1、创建字体，设置其为红色、粗体：<br><br>HSSFFont&nbsp;font&nbsp;=&nbsp;workbook.createFont();<br>font.setColor(HSSFFont.COLOR_RED);<br>font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);<br>　　2、创建格式<br><br>HSSFCellStyle&nbsp;cellStyle=&nbsp;workbook.createCellStyle();<br>cellStyle.setFont(font);<br>　　3、应用格式&nbsp;<br><br>HSSFCell&nbsp;cell&nbsp;=&nbsp;row.createCell((short)&nbsp;0);<br>cell.setCellStyle(cellStyle);<br>cell.setCellType(HSSFCell.CELL_TYPE_STRING);<br>cell.setCellValue("标题&nbsp;");　<br><br><br><strong>处理WORD文档</strong><br><br>import&nbsp;java.io.*;&nbsp;<br>import&nbsp;org.textmining.text.extraction.WordExtractor;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFWorkbook;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFSheet;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFRow;<br>import&nbsp;org.apache.poi.hssf.usermodel.HSSFCell;<br><br>public&nbsp;class&nbsp;TestPoi&nbsp;{&nbsp;<br>public&nbsp;TestPoi()&nbsp;{&nbsp;<br>}&nbsp;<br>public&nbsp;static&nbsp;void&nbsp;main(String&nbsp;args[])&nbsp;throws&nbsp;Exception&nbsp;<br>{&nbsp;<br>FileInputStream&nbsp;in&nbsp;=&nbsp;new&nbsp;FileInputStream&nbsp;("D:\\a.doc");&nbsp;<br>WordExtractor&nbsp;extractor&nbsp;=&nbsp;new&nbsp;WordExtractor();&nbsp;<br>String&nbsp;str&nbsp;=&nbsp;extractor.extractText(in);&nbsp;<br>//System.out.println("the&nbsp;result&nbsp;length&nbsp;is"+str.length());&nbsp;<br>System.out.println(str);&nbsp;<br>}&nbsp;<br>}&nbsp;
<img src ="http://www.blogjava.net/imcb/aggbug/128208.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-07-04 23:22 <a href="http://www.blogjava.net/imcb/archive/2007/07/04/128208.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>流程代码前，代码后的处理</title><link>http://www.blogjava.net/imcb/archive/2007/06/28/126908.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Thu, 28 Jun 2007 11:38:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/28/126908.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126908.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/28/126908.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126908.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126908.html</trackback:ping><description><![CDATA[<p>在审批流程中，加入处理前和处理后的数据处理，可以将审批流程外的业务处理或是流程额外程序出来分离出来。放在代码前，代码后处理。<br><br>public WfActivity assignComplete(WfTranstion wfTrans,String procId, String activityId,<br>&nbsp;&nbsp;&nbsp;String touserId,String memo,HttpServletRequest request)throws WfException {<br>&nbsp;&nbsp;WfActivity wfAct = null;<br>&nbsp;&nbsp;try {</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CodeFormula.parseBeforeCode(wfTrans.getConnection(),procId,activityId,CodeFormula.apply_code,request);<br>&nbsp;&nbsp;&nbsp;CheckAgree.execute(wfTrans,procId, activityId, new WfUser(uname, pwd),流程自己处理的方法<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;touserId,memo);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CodeFormula.parseAfterCode(wfTrans.getConnection(),procId,activityId,CodeFormula.apply_code,request);<br>&nbsp;&nbsp;} catch (WfException e) {<br>&nbsp;&nbsp;&nbsp;wfAct = null;<br>&nbsp;&nbsp;&nbsp;throw e;<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return wfAct;<br>&nbsp;}</p>
<img src ="http://www.blogjava.net/imcb/aggbug/126908.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-28 19:38 <a href="http://www.blogjava.net/imcb/archive/2007/06/28/126908.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java读取文件夹下的所有文件夹和文件 </title><link>http://www.blogjava.net/imcb/archive/2007/06/28/126830.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Thu, 28 Jun 2007 07:46:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/28/126830.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126830.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/28/126830.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126830.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126830.html</trackback:ping><description><![CDATA[package com.borland.samples.welcome;<br><br>import java.io.FileNotFoundException;<br>import java.io.IOException;<br>import java.io.File;<br><br>public class ReadFile {<br>&nbsp; public ReadFile() {}<br><br>&nbsp; /**<br>&nbsp;&nbsp; * 删除某个文件夹下的所有文件夹和文件<br>&nbsp;&nbsp; * @param delpath String<br>&nbsp;&nbsp; * @throws FileNotFoundException<br>&nbsp;&nbsp; * @throws IOException<br>&nbsp;&nbsp; * @return boolean<br>&nbsp;&nbsp; */<br>&nbsp; public static boolean deletefile(String delpath) throws FileNotFoundException,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IOException {<br>&nbsp;&nbsp;&nbsp; try {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File file = new File(delpath);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!file.isDirectory()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("1");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.delete();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (file.isDirectory()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("2");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] filelist = file.list();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; filelist.length; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File delfile = new File(delpath + "\\" + filelist[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!delfile.isDirectory()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("path=" + delfile.getPath());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("absolutepath=" + delfile.getAbsolutePath());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("name=" + delfile.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; delfile.delete();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("删除文件成功");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (delfile.isDirectory()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; deletefile(delpath + "\\" + filelist[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file.delete();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch (FileNotFoundException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("deletefile()&nbsp;&nbsp; Exception:" + e.getMessage());<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return true;<br>&nbsp; }<br><br>&nbsp; /**<br>&nbsp;&nbsp; * 删除某个文件夹下的所有文件夹和文件<br>&nbsp;&nbsp; * @param delpath String<br>&nbsp;&nbsp; * @throws FileNotFoundException<br>&nbsp;&nbsp; * @throws IOException<br>&nbsp;&nbsp; * @return boolean<br>&nbsp;&nbsp; */<br>&nbsp; public static boolean readfile(String filepath) throws FileNotFoundException,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IOException {<br>&nbsp;&nbsp;&nbsp; try {<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File file = new File(filepath);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!file.isDirectory()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("文件");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("path=" + file.getPath());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("absolutepath=" + file.getAbsolutePath());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("name=" + file.getName());<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (file.isDirectory()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("文件夹");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String[] filelist = file.list();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for (int i = 0; i &lt; filelist.length; i++) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; File readfile = new File(filepath + "\\" + filelist[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!readfile.isDirectory()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("path=" + readfile.getPath());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("absolutepath=" + readfile.getAbsolutePath());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("name=" + readfile.getName());<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if (readfile.isDirectory()) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; readfile(filepath + "\\" + filelist[i]);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br><br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch (FileNotFoundException e) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("readfile()&nbsp;&nbsp; Exception:" + e.getMessage());<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; return true;<br>&nbsp; }<br><br>&nbsp; public static void main(String[] args) {<br>&nbsp;&nbsp;&nbsp; try {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; readfile("D:/file");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //deletefile("D:/file");<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch (FileNotFoundException ex) {<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; catch (IOException ex) {<br>&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp; System.out.println("ok");<br>&nbsp; }<br><br>}
<img src ="http://www.blogjava.net/imcb/aggbug/126830.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-28 15:46 <a href="http://www.blogjava.net/imcb/archive/2007/06/28/126830.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate下数据批量处理解决方案</title><link>http://www.blogjava.net/imcb/archive/2007/06/27/126588.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Wed, 27 Jun 2007 06:53:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/27/126588.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126588.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/27/126588.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126588.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126588.html</trackback:ping><description><![CDATA[很多人都对java在批量数据的处理方面是否是其合适的场所持有怀疑的念头，由此延伸，那么就会认为orm可能也不是特别适合数据的批量处理。 其实，我想如果我们应用得当的话，完全可以消除orm批量处理性能问题这方面的顾虑。下面以hibernate为例来做为说明，假如我们真的不得不在java中使用hibernate来对数据进行批量处理的话。 向数据库插入100 000条数据，用hibernate可能像这样： <br><br>session session = sessionfactory.opensession(); <br>transaction tx = session.begintransaction(); <br>for ( int i=0; i&lt;100000; i++ ) { <br>customer customer = new customer(.....); <br>session.save(customer); } <br>tx.commit(); <br>session.close(); <br><br>　　大概在运行到第50 000条的时候，就会出现内存溢出而失败。这是hibernate把最近插入的customer都以session-level cache在内存做缓存，我们不要忘记hiberante并没有限制first-level cache 的缓存大小： <br><br>　　# 持久对象实例被管理在事务结束时，此时hibernate与数据库同步任何已经发生变 化的被管理的的对象。 <br><br>　　# session实现了异步write-behind，它允许hibernate显式地写操作的批处理。 这里，我给出hibernate如何实现批量插入的方法： <br>首先，我们设置一个合理的jdbc批处理大小，hibernate.jdbc.batch_size 20。 然后在一定间隔对session进行flush()和clear()。 <br><br>session session = sessionfactory.opensession(); <br>transaction tx = session.begintransaction(); <br>for ( int i=0; i&lt;100000; i++ ) { <br>customer customer = new customer(.....); <br>session.save(customer); <br>if ( i % 20 == 0 ) { <br>//flush 插入数据和释放内存: <br>session.flush(); session.clear(); } <br>} <br>tx.commit(); <br>session.close(); <br><br>　　那么，关于怎样删除和更新数据呢？那好，在hibernate2.1.6或者更后版本，scroll() 这个方法将是最好的途径： <br><br>session session = sessionfactory.opensession(); <br>transaction tx = session.begintransaction(); <br>scrollableresults customers = session.getnamedquery("getcustomers") <br>.scroll(scrollmode.forward_only); <br>int count=0; <br>while ( customers.next() ) { <br>customer customer = (customer) customers.get(0); <br>customer.updatestuff(...); <br>if ( ++count % 20 == 0 ) { <br>//flush 更新数据和释放内存: <br>session.flush(); session.clear(); } } <br>tx.commit(); session.close(); <br><br>　　这种做法并不困难，也不算不优雅。请注意，如果customer启用了second-level caching ，我们仍然会有一些内存管理的问题。原因就是对于用户的每一次插入和更新，hibernate在事务处理结束后不得不通告second-level cache 。因此，我们在批处理情况下将要禁用用户使用缓存。 <br>
<img src ="http://www.blogjava.net/imcb/aggbug/126588.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-27 14:53 <a href="http://www.blogjava.net/imcb/archive/2007/06/27/126588.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java Logging API 使用</title><link>http://www.blogjava.net/imcb/archive/2007/06/27/126580.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Wed, 27 Jun 2007 06:11:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/27/126580.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126580.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/27/126580.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126580.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126580.html</trackback:ping><description><![CDATA[<span id=articlecontent1_articlecontent1_lblcontent>当你在开发程序的时候,&nbsp;调试(debugging)和日志(logging)都是非常重要的工作,&nbsp;但是,&nbsp;现在有太多的&nbsp;logging&nbsp;api&nbsp;问世,&nbsp;因为他们都不错,&nbsp;很难做一个抉择.&nbsp;国外&nbsp;java&nbsp;论坛对于这些&nbsp;logging&nbsp;方式也是有一番讨论.<br><br>而&nbsp;common&nbsp;logging&nbsp;就是一个在这几个不同的&nbsp;logging&nbsp;api&nbsp;中建立小小的桥梁.目前在&nbsp;java&nbsp;中最有名的&nbsp;log&nbsp;方式,&nbsp;首推是&nbsp;log4j,&nbsp;另是&nbsp;jdk&nbsp;1.4&nbsp;logging&nbsp;api.&nbsp;除此之外,&nbsp;还有&nbsp;avalon&nbsp;中用的&nbsp;logkit&nbsp;等等&nbsp;.&nbsp;而&nbsp;commons-logging&nbsp;也有实现一些基本&nbsp;的&nbsp;logging&nbsp;方式为&nbsp;nooplog&nbsp;及&nbsp;simplelog.&nbsp;对于他们的比较不在这次讨论范围,<br><br>有兴趣者请自行参阅参考文件.<br><br>快速使用&nbsp;logging&nbsp;其实&nbsp;logging&nbsp;非常简单去使用,&nbsp;将&nbsp;commons-logging.jar&nbsp;放到&nbsp;/web-inf/lib&nbsp;之下.接著写以下的代码<br><br>loggingtest.java&nbsp;<br><br>package&nbsp;com.softleader.newspaper.java.opensource;<br><br>import&nbsp;org.apache.commons.logging.log;<br>import&nbsp;org.apache.commons.logging.logfactory;<br><br>public&nbsp;class&nbsp;loggingtest&nbsp;{<br><br>log&nbsp;log&nbsp;=&nbsp;logfactory.getlog(loggingtest.class);<br><br>public&nbsp;void&nbsp;hello()&nbsp;{<br>log.error("error");<br>log.debug("debug");<br>log.warn("warn");<br>log.info("info");<br>log.trace("trace");<br>system.out.println("okok");<br>}<br><br>}&nbsp;<br><br>在&nbsp;/&nbsp;放置一个&nbsp;jsp&nbsp;测试&nbsp;test-commons-logging.jsp<br><br>&lt;%@&nbsp;page&nbsp;import="com.softleader.newspaper.java.opensource.loggingtest"&nbsp;%&gt;<br>&lt;%&nbsp;loggingtest&nbsp;test&nbsp;=&nbsp;new&nbsp;loggingtest();&nbsp;test.hello();%&gt;&nbsp;<br><br>你将会看到&nbsp;tomcat&nbsp;console&nbsp;会有下面输出&nbsp;<br><br>log4j:warn&nbsp;no&nbsp;appenders&nbsp;could&nbsp;be&nbsp;found&nbsp;for&nbsp;logger&nbsp;(com.softleader.newspaper.java.opensource.loggingtest).<br>log4j:warn&nbsp;please&nbsp;initialize&nbsp;the&nbsp;log4j&nbsp;system&nbsp;properly.okok<br><br>是因为你还没有配置&nbsp;commons-logging.properties,&nbsp;马上会为你介绍&nbsp;~~~.&nbsp;<br><br>设定&nbsp;commons-logging.properties&nbsp;你可以设置你的&nbsp;log&nbsp;factory&nbsp;是要使用哪一个&nbsp;我以&nbsp;log4j&nbsp;为例子&nbsp;在&nbsp;/web-inf/classes/commons-logging.properties&nbsp;中写入&nbsp;<br>org.apache.commons.logging.log=org.apache.commons.logging.impl.log4jcategorylog&nbsp;<br>如果你&nbsp;server&nbsp;是使用&nbsp;jdk1.4&nbsp;以上的版本&nbsp;<br>可以使用&nbsp;org.apache.commons.logging.impl.jdk14logger<br>接著根据你的&nbsp;logger&nbsp;撰写符合他的&nbsp;properties&nbsp;拿&nbsp;log4j&nbsp;为例子&nbsp;你就要在&nbsp;<br>/web-inf/classes/&nbsp;下放置一个&nbsp;log4j.properties<br><br>//日志输出到文件<br>log4j.rootlogger=debug,&nbsp;a_default<br>log4j.appender.a_default=org.apache.log4j.rollingfileappender<br>log4j.appender.a_default.file=c://log/test.log<br>log4j.appender.a_default.maxfilesize=4000kb<br>log4j.appender.a_default.maxbackupindex=10<br>log4j.appender.a_default.layout=org.apache.log4j.patternlayout<br>log4j.appender.a_default.layout.conversionpattern=%d{iso8601}&nbsp;-&nbsp;%p&nbsp;-&nbsp;%m%n<br><br>#&nbsp;比较完整的输出<br>#&nbsp;log4j.appender.a_default.layout.conversionpattern=%d&nbsp;%-5p&nbsp;[%t]&nbsp;%-17c{2}&nbsp;(%13f:%l)&nbsp;%3x&nbsp;-&nbsp;%m%n<br>//日志输出到控制台<br>log4j.rootlogger=info,&nbsp;a1<br>log4j.appender.a1=org.apache.log4j.consoleappender<br>log4j.appender.a1.layout=org.apache.log4j.patternlayout<br>log4j.appender.a1.layout.conversionpattern=%-d{yyyy-mm-dd&nbsp;hh:mm:ss,sss}&nbsp;[%c]-[%p]&nbsp;%m%n<br><br><br>此时你去执行&nbsp;test-commons-logging.jsp&nbsp;输出的内容,&nbsp;就会记录在你的&nbsp;c:\log&nbsp;目录的&nbsp;test.log&nbsp;中了&nbsp;ps:如果没有相关的&nbsp;class&nbsp;会使用到&nbsp;simplog,&nbsp;此时要设定的是&nbsp;<br>simplelog.properties&nbsp;结论以我自己本身使用的经验,&nbsp;log4j&nbsp;可以满足所有工程师,&nbsp;所以我也是直接使用&nbsp;log4j&nbsp;而没有使用&nbsp;commons-logging.&nbsp;<br><br>不过为了增加产品的通用性,&nbsp;避免移植时候的麻烦,&nbsp;新的产品及项目,&nbsp;我会将他改成&nbsp;commons-logging&nbsp;api&nbsp;去调用.&nbsp;<br><br>如果你对commons-logging的工作原理不是很了解，请参考＜commons-logging的使用方法＞<br><br></span><br><img height=1 src="http://www.z6688.com/down_info.asp?id=46270" width=1 border=0><br>文章整理：<a href="http://www.west263.com/"><u><font color=#0000ff>http://www.west263.com</font></u></a><br>
<img src ="http://www.blogjava.net/imcb/aggbug/126580.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-27 14:11 <a href="http://www.blogjava.net/imcb/archive/2007/06/27/126580.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过comment查找中文名的数据库表</title><link>http://www.blogjava.net/imcb/archive/2007/06/27/126488.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Wed, 27 Jun 2007 02:22:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/27/126488.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126488.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/27/126488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126488.html</trackback:ping><description><![CDATA[<p>package com.augurit.pysz.common.excelUtil;</p>
<p>import java.sql.Connection;<br>import java.sql.DriverManager;<br>import java.sql.PreparedStatement;<br>import java.sql.ResultSet;<br>import java.sql.SQLException;<br>import java.util.ArrayList;<br>import java.util.Iterator;<br>import java.util.List;</p>
<p>import com.augur.wf.shark.common.Db.DbConnectionManager;<br>import com.augurit.pysz.common.excelUtil.model.TableValue;</p>
<p>/**<br>&nbsp;* 从hibernate中将table的表结构找出来。 imcb 2007.6.26<br>&nbsp;*/<br>public class RetrieveTableContext {</p>
<p>&nbsp;public Connection testDB() throws ClassNotFoundException, SQLException {<br>&nbsp;&nbsp;Connection con = null;<br>&nbsp;&nbsp;Class.forName("oracle.jdbc.driver.OracleDriver");<br>&nbsp;&nbsp;con = DriverManager.getConnection(<br>&nbsp;&nbsp;&nbsp;&nbsp;"jdbc:oracle:thin:@192.168.13.65:1521:pysz", "shark", "shark");<br>&nbsp;&nbsp;return con;<br>&nbsp;}</p>
<p>&nbsp;/**<br>&nbsp; * 通过表名查找表的英文名<br>&nbsp; *&nbsp; <br>&nbsp; * @param dbName数据库实例名称<br>&nbsp; * @return<br>&nbsp; */<br>&nbsp;public List getAllTableName(String dbName) {<br>&nbsp;&nbsp;List ls = new ArrayList();<br>&nbsp;&nbsp;Connection con = null;&nbsp;&nbsp;<br>&nbsp;&nbsp;try {<br>&nbsp;&nbsp;&nbsp;// con = DbConnectionManager.getInstance().getConnection("idb");<br>&nbsp;&nbsp;&nbsp;con = this.testDB();&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;&nbsp;String sql = "select * from sys.all_tab_comments t where t.table_type = 'TABLE' and t.owner = '"+dbName+"'";<br>&nbsp;&nbsp;&nbsp;PreparedStatement psts = con.prepareStatement(sql);<br>&nbsp;&nbsp;&nbsp;ResultSet rs = psts.executeQuery();<br>&nbsp;&nbsp;&nbsp;int i=0;<br>&nbsp;&nbsp;&nbsp;while(rs.next()){<br>&nbsp;&nbsp;&nbsp;&nbsp;TableValue tv = new TableValue();<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(++i+"条 ：");<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rs.getString(1)+" : ");<br>&nbsp;&nbsp;&nbsp;&nbsp;tv.setDbName(rs.getString(1));<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rs.getString(2)+" : ");<br>&nbsp;&nbsp;&nbsp;&nbsp;tv.setTableName(rs.getString(2));<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.print(rs.getString(3)+" : ");<br>&nbsp;&nbsp;&nbsp;&nbsp;tv.setDbType(rs.getString(3));<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(rs.getString(4));<br>&nbsp;&nbsp;&nbsp;&nbsp;tv.setComment(rs.getString(4));<br>&nbsp;&nbsp;&nbsp;&nbsp;ls.add(tv);<br>&nbsp;&nbsp;&nbsp;}<br>&nbsp;&nbsp;} catch (Exception we) {<br>&nbsp;&nbsp;&nbsp;<br>&nbsp;&nbsp;} finally {<br>&nbsp;&nbsp;&nbsp;DbConnectionManager.getInstance().freeConnection("idb", con);<br>&nbsp;&nbsp;}&nbsp;</p>
<p>&nbsp;&nbsp;return ls;<br>&nbsp;}<br>&nbsp;/**<br>&nbsp; * 通过表名查找表的英文名<br>&nbsp; * <br>&nbsp; * @param str1<br>&nbsp; * @param dbName数据库实例名称<br>&nbsp; * @return<br>&nbsp; */&nbsp;<br>&nbsp;public String getTableName(String str1,String dbName){&nbsp;&nbsp;<br>&nbsp;&nbsp;String tableName = new String();<br>&nbsp;&nbsp;List ls = this.getAllTableName(dbName);<br>&nbsp;&nbsp;Iterator iterator =ls.iterator();<br>&nbsp;&nbsp;while(iterator.hasNext()){<br>&nbsp;&nbsp;&nbsp;TableValue tv =(TableValue)iterator.next();<br>&nbsp;&nbsp;&nbsp;boolean hasStr = tv.getComment().contains(str1);<br>&nbsp;&nbsp;&nbsp;if(hasStr)return tv.getTableName();<br>&nbsp;&nbsp;}<br>&nbsp;&nbsp;return tableName;<br>&nbsp;}<br>&nbsp;/**<br>&nbsp; * 通过表名查找数据表属性值。<br>&nbsp; * <br>&nbsp; * @param tableName<br>&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 表的英文名<br>&nbsp; * @return<br>&nbsp; */<br>&nbsp;public List getTableContext(String tableName) {<br>&nbsp;&nbsp;List tList = new ArrayList();</p>
<p>&nbsp;&nbsp;return tList;<br>&nbsp;}<br>&nbsp;<br>&nbsp;public static void main(String[] str1){<br>//&nbsp;&nbsp;RetrieveTableContext rtc = new RetrieveTableContext();<br>//&nbsp;&nbsp;rtc.getTableName("d","SHARK");<br>&nbsp;&nbsp;String u="string yu";<br>&nbsp;&nbsp;String in = "s";<br>&nbsp;&nbsp;String out = "e";&nbsp;&nbsp;<br>&nbsp;&nbsp;System.out.println(in.contains(in));//in是否包含in字符串<br>&nbsp;&nbsp;System.out.println(u.contains(out));&nbsp;&nbsp;<br>&nbsp;}<br>}<br></p>
<img src ="http://www.blogjava.net/imcb/aggbug/126488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-27 10:22 <a href="http://www.blogjava.net/imcb/archive/2007/06/27/126488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用Jakarta POI EXCEL API自动生成ORACLE数据字典的源代码 </title><link>http://www.blogjava.net/imcb/archive/2007/06/26/126289.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Tue, 26 Jun 2007 02:57:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/26/126289.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126289.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/26/126289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126289.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126289.html</trackback:ping><description><![CDATA[<span class=tpc_content>使用Jakarta POI EXCEL API自动生成ORACLE数据字典的源代码<br><br><br>在项目的开发过程中,数据字典的维护是一件烦琐的事情.所以我写了一段代码来自动生成数据字典. 其中用到Jakarta POI,这是一个用于访问Microsoft Format Files的开源项目,详细信息请看这里. <a href="http://jakarta.apache.org/poi/index.html" target=_blank><font color=#0000ff>http://jakarta.apache.org/poi/index.html</font></a> 下面是程序的源代码及说明<br><br><br>在项目的开发过程中,数据字典的维护是一件烦琐的事情.所以我写了一段代码来自动生成数据字典.<br>其中用到Jakarta POI,这是一个用于访问Microsoft Format Files的开源项目,详细信息请看这里.<br><a href="http://jakarta.apache.org/poi/index.html" target=_blank><font color=#0000ff>http://jakarta.apache.org/poi/index.html</font></a><br>下面是程序的源代码及说明<br><br>import java.io.*;<br>import java.sql.*;<br>import org.apache.poi.hssf.usermodel.*;<br><br>public class AppMain {<br>&nbsp; public AppMain() {<br>&nbsp; }<br><br>&nbsp; public static void main(String[] args) {<br>&nbsp; &nbsp; try {<br>&nbsp; &nbsp; &nbsp; &nbsp; HSSFWorkbook wb = new HSSFWorkbook();<br>&nbsp; &nbsp; &nbsp; &nbsp; HSSFSheet sheet =null;<br><br>&nbsp; &nbsp; &nbsp; /**连接ORACLE的数据库,关键在于两个系统级的VIEW:<br>&nbsp; &nbsp; &nbsp; &nbsp; all_tab_columns 记录着ORACLE所有的字段定义信息.<br>&nbsp; &nbsp; &nbsp; &nbsp; DBA_COL_COMMENTS 记录着字段的注释信息,*/<br><br><br>&nbsp; &nbsp; &nbsp; &nbsp; Class.forName("oracle.jdbc.driver.OracleDriver");<br>&nbsp; &nbsp; &nbsp; &nbsp; Connection con = DriverManager.getConnection(<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "jdbc:oracle:thin:@127.0.0.1:1521:ORACLE", "用户名", &nbsp; "密码");<br>&nbsp; &nbsp; &nbsp; &nbsp; Statement stmt = con.createStatement();<br>&nbsp; &nbsp; &nbsp; &nbsp; StringBuffer strbuf = new StringBuffer();<br>&nbsp; &nbsp; &nbsp; &nbsp; strbuf.append("SELECT A.*,B.comments");<br>&nbsp; &nbsp; &nbsp; &nbsp; strbuf.append(" FROM all_tab_columns A,DBA_COL_COMMENTS B");<br>&nbsp; &nbsp; &nbsp; &nbsp; strbuf.append(" WHERE A.owner=B.owner");<br>&nbsp; &nbsp; &nbsp; &nbsp; strbuf.append(" AND A.table_name=B.table_name");<br>&nbsp; &nbsp; &nbsp; &nbsp; strbuf.append(" AND A.COLUMN_NAME=B.COLUMN_NAME");<br>&nbsp; &nbsp; &nbsp; &nbsp; //owner是建立表的用户名<br>&nbsp; &nbsp; &nbsp; &nbsp; strbuf.append(" AND A.owner=myuser");<br>&nbsp; &nbsp; &nbsp; &nbsp; strbuf.append(" ORDER BY A.TABLE_NAME");<br>&nbsp; &nbsp; &nbsp; &nbsp; ResultSet rs = stmt.executeQuery(strbuf.toString());<br><br>&nbsp; &nbsp; &nbsp; &nbsp; String tb = "";<br>&nbsp; &nbsp; &nbsp; &nbsp; int k = 0;<br>&nbsp; &nbsp; &nbsp; &nbsp; while (rs.next()) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //对每个表生成一个新的sheet,并以表名命名<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (!tb.equals(rs.getString("TABLE_NAME"))) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; sheet = wb.createSheet(rs.getString("TABLE_NAME"));<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //设置表头的说明<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HSSFRow row = sheet.createRow(0);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setCellGBKValue(row.createCell((short) 0),"字段名");<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setCellGBKValue(row.createCell((short) 1),"字段类型");<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setCellGBKValue(row.createCell((short) 2),"字段长度");<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setCellGBKValue(row.createCell((short) 3),"数字长度");<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setCellGBKValue(row.createCell((short) 4),"小数位数");<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setCellGBKValue(row.createCell((short) 5),"能否为NULL");<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setCellGBKValue(row.createCell((short) 6),"字段说明");<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k = 1;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; } else {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; k++;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tb = rs.getString("TABLE_NAME");<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; HSSFRow row = sheet.createRow(k);<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row.createCell((short) 0).setCellValue(rs.getString(<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "COLUMN_NAME"));<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row.createCell((short) 1).setCellValue(rs.getString("DATA_TYPE"));<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row.createCell((short) 2).setCellValue(rs.getString(<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "DATA_LENGTH"));<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row.createCell((short) 3).setCellValue(rs.getString(<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "DATA_PRECISION"));<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row.createCell((short) 4).setCellValue(rs.getString(<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "DATA_SCALE"));<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row.createCell((short) 5).setCellValue(rs.getString("NULLABLE"));<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; setCellGBKValue(row.createCell((short) 6),rs.getString("COMMENTS"));<br><br>&nbsp; &nbsp; &nbsp; &nbsp; }<br><br>&nbsp; &nbsp; &nbsp; &nbsp; //把生成的EXCEL文件输出保存<br>&nbsp; &nbsp; &nbsp; &nbsp; FileOutputStream fileOut = new FileOutputStream("F:\\数据字典.xls");<br>&nbsp; &nbsp; &nbsp; &nbsp; wb.write(fileOut);<br>&nbsp; &nbsp; &nbsp; &nbsp; fileOut.close();<br><br>&nbsp; &nbsp; &nbsp; &nbsp; rs.close();<br>&nbsp; &nbsp; &nbsp; &nbsp; stmt.close();<br>&nbsp; &nbsp; &nbsp; &nbsp; con.close();<br>&nbsp; &nbsp; } catch (Exception e) {<br>&nbsp; &nbsp; &nbsp; &nbsp; e.printStackTrace();<br>&nbsp; &nbsp; }<br>&nbsp; }<br><br>&nbsp; &nbsp; &nbsp; &nbsp; /**<br><br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 这个函数是为了设置一个CELL为中文字符串<br><br>&nbsp; &nbsp; &nbsp; &nbsp; */ <br><br>&nbsp; private static void setCellGBKValue(HSSFCell cell, String value) {<br>&nbsp; &nbsp; cell.setCellType(HSSFCell.CELL_TYPE_STRING);<br>&nbsp; &nbsp; &nbsp; //设置CELL的编码信息<br>&nbsp; &nbsp; cell.setEncoding(HSSFCell.ENCODING_UTF_16);<br>&nbsp; &nbsp; cell.setCellValue(value);<br>&nbsp; }<br>}<br><br><br>这样运行这段代码后,就会生成一个数据字典.如果需要,可以对选择的信息做修改,<br>只需要修改相关的对ORACLE系统表或者视图的SELECT语句即可.</span>
<img src ="http://www.blogjava.net/imcb/aggbug/126289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-26 10:57 <a href="http://www.blogjava.net/imcb/archive/2007/06/26/126289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>用java实现外部调用exe文件 </title><link>http://www.blogjava.net/imcb/archive/2007/06/26/126263.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Tue, 26 Jun 2007 02:00:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/26/126263.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126263.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/26/126263.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126263.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126263.html</trackback:ping><description><![CDATA[<div class=storytext>转自damfool的csdn blog<br>
<p><br>1.0 用java调用windows系统的exe文件，比如notepad，calc之类：<br>&nbsp;public class Demo{<br>&nbsp;&nbsp; public static void main(String args[]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Runtime rn=Runtime.getRuntime();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Process p=null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=rn.exec(notepad);<br>&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Error exec notepad");<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>}</p>
<p><br>2.0调用其他的可执行文件，例如：自己制作的exe，或是下载安装的软件<br>public class Demo{<br>&nbsp;&nbsp; public static void main(String args[]){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Runtime rn=Runtime.getRuntime();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Process p=null;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try{<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; p=rn.exec(""D:/AnyQ/AnyQ.exe"");<br>&nbsp;&nbsp;&nbsp;&nbsp; }catch(Exception e){<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println("Error exec AnyQ");<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp; }<br>}<br></p>
</div>
<img src ="http://www.blogjava.net/imcb/aggbug/126263.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-26 10:00 <a href="http://www.blogjava.net/imcb/archive/2007/06/26/126263.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>java如何操作word,excel文档 </title><link>http://www.blogjava.net/imcb/archive/2007/06/25/126163.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Mon, 25 Jun 2007 09:33:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/25/126163.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126163.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/25/126163.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126163.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126163.html</trackback:ping><description><![CDATA[<font size=2>1、一个jacob操作Word的例子，其他操作excel，pdf的sample里都有</font>
<div align=left>
<p class=code><font size=2>　　import java.io.File;<br>　　import com.jacob.com.*;<br>　　import com.jacob.activeX.*;<br>　　public class WordTest {<br>　　<br>　　　public static void main(String[] args) {<br>　　　　WordBean word=new WordBean();<br>　　　　word.openWord(true);<br>　　　　word.createNewDocument();<br>　　　　word.insertText("Hello word.");<br>　　　}<br>　　}<br><br>　　import com.jacob.activeX.*;<br>　　import com.jacob.com.*;<br>　　public class WordBean extends java.awt.Panel<br>　　{<br>　　　private ActiveXComponent MsWordApp = null;<br>　　　private Dispatch document = null;<br>　　　public WordBean()<br>　　　{<br>　　　　super();<br>　　　}<br>　　　public void openWord(boolean makeVisible)<br>　　　{<br>　　//Open Word if we've not done it already<br>　　　　　if (MsWordApp == null)<br>　　　　　{<br>　　　　　　MsWordApp = new ActiveXComponent("Word.Application");<br>　　　　　}<br>　　//Set the visible property as required.<br>　　　　　Dispatch.put(MsWordApp, "Visible", new Variant(makeVisible));<br>　　　}<br>　　　public void createNewDocument()<br>　　　{<br>　　//Find the Documents collection object maintained by Word<br>　　　　　Dispatch documents =Dispatch.get(MsWordApp,"Documents").toDispatch();<br>　　//Call the Add method of the Documents collection to create<br>　　//a new document to edit<br>　　　　　document = Dispatch.call(documents,"Add").toDispatch();<br>　　　}<br>　　　public void insertText(String textToInsert)<br>　　　{<br>　　// Get the current selection within Word at the moment. If<br>　　// a new document has just been created then this will be at<br>　　// the top of the new doc<br>　　　　　Dispatch selection =Dispatch.get(MsWordApp,"Selection").toDispatch();<br>　　//Put the specified text at the insertion point<br>　　　　　Dispatch.put(selection,"Text",textToInsert);<br>　　　}<br>　　　public void saveFileAs(String filename)<br>　　　{<br>　　　　Dispatch.call(document,"SaveAs",filename);<br>　　　}<br>　　　public void printFile()<br>　　　{<br>　　//Just print the current document to the default printer<br>　　　　Dispatch.call(document,"PrintOut");<br>　　　}<br>　　　public void closeDocument()<br>　　　{<br>　　// Close the document without saving changes<br>　　// 0 = wdDoNotSaveChanges<br>　　// -1 = wdSaveChanges<br>　　// -2 = wdPromptToSaveChanges<br>　　　　　Dispatch.call(document, "Close", new Variant(0));<br>　　　　　document = null;<br>　　　}<br>　　　public void closeWord()<br>　　　{<br>　　　　　Dispatch.call(MsWordApp,"Quit");<br>　　　　　MsWordApp = null;<br>　　　　　document = null;<br>　　　}<br>　　}</font></p>
</div>
<p align=left><font size=2>&nbsp;</font></p>
<p align=left><font size=2>2、 Java Excel 操作excel</font></p>
<p align=left><font size=2>　　从Excel文件读取数据表</font></p>
<p align=left><font size=2>　　Java Excel API 既可以从本地文件系统的一个文件(.xls)，也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术 语：工作薄)，下面的代码片段举例说明了应该如何操作：(完整代码见ExcelReading.java)</font></p>
<div align=left>
<p class=code><font size=2>&nbsp; import java.io.*;<br>import jxl.*;<br>&#8230; &#8230; &#8230; &#8230;<br>try<br>{<br>//构建Workbook对象, 只读Workbook对象<br>//直接从本地文件创建Workbook<br>//从输入流创建Workbook<br>&nbsp; InputStream is = new FileInputStream(sourcefile);<br>&nbsp; jxl.Workbook rwb = Workbook.getWorkbook(is);<br>}<br>catch (Exception e)<br>{<br>e.printStackTrace();<br>}</font></p>
</div>
<p align=left><font size=2>　　一旦创建了Workbook，我们就可以通过它来访问Excel Sheet(术语：工作表)。参考下面的代码片段：</font></p>
<div align=left>
<p class=code><font size=2>//获取第一张Sheet表<br>Sheet rs = rwb.getSheet(0);</font></p>
</div>
<p align=left><font size=2>　　我们既可能通过Sheet的名称来访问它，也可以通过下标来访问它。如果通过下标来访问的话，要注意的一点是下标从0开始，就像数组一样。</font></p>
<p align=left><font size=2>　　一旦得到了Sheet，我们就可以通过它来访问Excel Cell(术语：单元格)。参考下面的代码片段：</font></p>
<div align=left>
<p class=code><font size=2>//获取第一行，第一列的值<br>Cell c00 = rs.getCell(0, 0);<br>String strc00 = c00.getContents();<br><br>//获取第一行，第二列的值<br>Cell c10 = rs.getCell(1, 0);<br>String strc10 = c10.getContents();<br><br>//获取第二行，第二列的值<br>Cell c11 = rs.getCell(1, 1);<br>String strc11 = c11.getContents();<br><br>System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());<br>System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());<br>System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());</font></p>
</div>
<p align=left><font size=2>　　如果仅仅是取得Cell的值，我们可以方便地通过getContents()方法，它可以将任何类型的Cell值都作为一个字符串返回。示例代码中 Cell(0, 0)是文本型，Cell(1, 0)是数字型，Cell(1,1)是日期型，通过getContents()，三种类型的返回值都是字符型。</font></p>
<p align=left><font size=2>　　如果有需要知道Cell内容的确切类型，API也提供了一系列的方法。参考下面的代码片段：</font></p>
<div align=left>
<p class=code><font size=2>String strc00 = null;<br>double strc10 = 0.00;<br>Date strc11 = null;<br><br>Cell c00 = rs.getCell(0, 0);<br>Cell c10 = rs.getCell(1, 0);<br>Cell c11 = rs.getCell(1, 1);<br><br>if(c00.getType() == CellType.LABEL)<br>{<br>LabelCell labelc00 = (LabelCell)c00;<br>strc00 = labelc00.getString();<br>}<br>if(c10.getType() == CellType.NUMBER)<br>{<br>NmberCell numc10 = (NumberCell)c10;<br>strc10 = numc10.getValue();<br>}<br>if(c11.getType() == CellType.DATE)<br>{<br>DateCell datec11 = (DateCell)c11;<br>strc11 = datec11.getDate();<br>}<br><br>System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());<br>System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());<br>System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());</font></p>
</div>
<p align=left><font size=2>　　在得到Cell对象后，通过getType()方法可以获得该单元格的类型，然后与API提供的基本类型相匹配，强制转换成相应的类型，最后调用相应的取 值方法getXXX()，就可以得到确定类型的值。API提供了以下基本类型，与Excel的数据格式相对应：</font></p>
<p align=left><font size=2>　　每种类型的具体意义，请参见Java Excel API Document。</font></p>
<p align=left><font size=2>当你完成对Excel电子表格数据的处理后，一定要使用close()方法来关闭先前创建的对象，以释放读取数据表的过程中所占用的内存空间，在读取大量数据时显得尤为重要。参考如下代码片段：</font></p>
<div align=left>
<p class=code><font size=2>//操作完成时，关闭对象，释放占用的内存空间<br>rwb.close();<br><br>　　Java Excel API提供了许多访问Excel数据表的方法，在这里我只简要地介绍几个常用的方法，其它的方法请参考附录中的Java Excel API Document。</font></p>
</div>
<p align=left><font size=2>　　Workbook类提供的方法</font></p>
<p align=left><font size=2>　　1. int getNumberOfSheets()</font></p>
<p align=left><font size=2>　　获得工作薄（Workbook）中工作表（Sheet）的个数，示例：</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>int sheets = rwb.getNumberOfSheets();</font></p>
</div>
<p align=left><font size=2>　　2. Sheet[] getSheets()</font></p>
<p align=left><font size=2>　　返回工作薄（Workbook）中工作表（Sheet）对象数组，示例：</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>Sheet[] sheets = rwb.getSheets();</font></p>
</div>
<p align=left><font size=2>　　3. String getVersion()</font></p>
<p align=left><font size=2>　　返回正在使用的API的版本号，好像是没什么太大的作用。</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>String apiVersion = rwb.getVersion();</font></p>
</div>
<p align=left><font size=2>　　Sheet接口提供的方法</font></p>
<p align=left><font size=2>　　1) String getName()</font></p>
<p align=left><font size=2>　　获取Sheet的名称，示例：</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>jxl.Sheet rs = rwb.getSheet(0);<br>String sheetName = rs.getName();</font></p>
</div>
<p align=left><font size=2>　　2) int getColumns()</font></p>
<p align=left><font size=2>　　获取Sheet表中所包含的总列数，示例：</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>jxl.Sheet rs = rwb.getSheet(0);<br>int rsColumns = rs.getColumns();</font></p>
</div>
<p align=left><font size=2>　　3) Cell[] getColumn(int column)</font></p>
<p align=left><font size=2>　　获取某一列的所有单元格，返回的是单元格对象数组，示例：</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>jxl.Sheet rs = rwb.getSheet(0);<br>Cell[] cell = rs.getColumn(0);</font></p>
</div>
<p align=left><font size=2>　　4) int getRows()</font></p>
<p align=left><font size=2>　　获取Sheet表中所包含的总行数，示例：</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>jxl.Sheet rs = rwb.getSheet(0);<br>int rsRows = rs.getRows();</font></p>
</div>
<p align=left><font size=2>　　5) Cell[] getRow(int row)</font></p>
<p align=left><font size=2>　　获取某一行的所有单元格，返回的是单元格对象数组，示例：</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>jxl.Sheet rs = rwb.getSheet(0);<br>Cell[] cell = rs.getRow(0);</font></p>
</div>
<p align=left><font size=2>　　6) Cell getCell(int column, int row)</font></p>
<p align=left><font size=2>　　获取指定单元格的对象引用，需要注意的是它的两个参数，第一个是列数，第二个是行数，这与通常的行、列组合有些不同。</font></p>
<div align=left>
<p class=code><font size=2>jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File(sourcefile));<br>jxl.Sheet rs = rwb.getSheet(0);<br>Cell cell = rs.getCell(0, 0);</font></p>
</div>
<p align=left><font size=2>&nbsp;</font></p>
<p align=left><font size=2>　2 生成新的Excel工作薄</font></p>
<p align=left><font size=2>　　下面的代码主要是向大家介绍如何生成简单的Excel工作表，在这里单元格的内容是不带任何修饰的(如：字体，颜色等等)，所有的内容都作为字符串写入。(完整代码见ExcelWriting.java)</font></p>
<p align=left><font size=2>　　与读取Excel工作表相似，首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象，这里要注意的是，只能通过API 提供的工厂方法来创建Workbook，而不能使用WritableWorkbook的构造函数，因为类WritableWorkbook的构造函数为 protected类型。示例代码片段如下：</font></p>
<div align=left>
<p class=code><font size=2>import java.io.*;<br>import jxl.*;<br>import jxl.write.*;<br>&#8230; &#8230; &#8230; &#8230;<br>try<br>{<br>//构建Workbook对象, 只读Workbook对象<br>//Method 1：创建可写入的Excel工作薄<br>&nbsp; jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));<br><br>//Method 2：将WritableWorkbook直接写入到输出流<br>/*<br>&nbsp; OutputStream os = new FileOutputStream(targetfile);<br>&nbsp; jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(os);<br>*/<br>}<br>catch (Exception e)<br>{<br>e.printStackTrace();<br>}</font></p>
</div>
<p align=left><font size=2>　　API 提供了两种方式来处理可写入的输出流，一种是直接生成本地文件，如果文件名不带全路径的话，缺省的文件会定位在当前目录，如果文件名带有全路径的 话，则生成的Excel文件则会定位在相应的目录；另外一种是将Excel对象直接写入到输出流，例如：用户通过浏览器来访问Web服务器，如果HTTP 头设置正确的话，浏览器自动调用客户端的Excel应用程序，来显示动态生成的Excel电子表格。</font></p>
<p align=left><font size=2>　　接下来就是要创建工作表，创建工作表的方法与创建工作薄的方法几乎一样，同样是通过工厂模式方法获得相应的对象，该方法需要两个参数，一个是工作表的名称，另一个是工作表在工作薄中的位置，参考下面的代码片段：</font></p>
<div align=left>
<p class=code><font size=2>//创建Excel工作表<br>jxl.write.WritableSheet ws = wwb.createSheet("Test Sheet 1", 0);</font></p>
</div>
<p align=left><font size=2>　　"这锅也支好了，材料也准备齐全了，可以开始下锅了！"，现在要做的只是实例化API所提供的Excel基本数据类型，并将它们添加到工作表中就可以了，参考下面的代码片段：</font></p>
<div align=left>
<p class=code><font size=2>//1.添加Label对象<br>jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell");<br>ws.addCell(labelC);<br><br>//添加带有字型Formatting的对象<br>jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);<br>jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);<br>jxl.write.Label labelCF = new jxl.write.Label(1, 0, "This is a Label Cell", wcfF);<br>ws.addCell(labelCF);<br><br>//添加带有字体颜色Formatting的对象<br>jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,<br>UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);<br>jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);<br>jxl.write.Label labelCFC = new jxl.write.Label(1, 0, "This is a Label Cell", wcfFC);<br>ws.addCell(labelCF);<br><br>//2.添加Number对象<br>jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926);<br>ws.addCell(labelN);<br><br>//添加带有formatting的Number对象<br>jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");<br>jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);<br>jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);<br>ws.addCell(labelNF);<br><br>//3.添加Boolean对象<br>jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);<br>ws.addCell(labelB);<br><br>//4.添加DateTime对象<br>jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());<br>ws.addCell(labelDT);<br><br>//添加带有formatting的DateFormat对象<br>jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");<br>jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);<br>jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);<br>ws.addCell(labelDTF);</font></p>
</div>
<p align=left><font size=2>　　这里有两点大家要引起大家的注意。第一点，在构造单元格时，单元格在工作表中的位置就已经确定了。一旦创建后，单元格的位置是不能够变更的，尽管单元格的 内容是可以改变的。第二点，单元格的定位是按照下面这样的规律(column, row)，而且下标都是从0开始，例如，A1被存储在(0, 0)，B1 被存储在(1, 0)。</font></p>
<p align=left><font size=2>　　最后，不要忘记关闭打开的Excel工作薄对象，以释放占用的内存，参见下面的代码片段：</font></p>
<div align=left>
<p class=code><font size=2>//写入Exel工作表<br>wwb.write();<br><br>//关闭Excel工作薄对象<br>wwb.close();</font></p>
</div>
<p align=left><font size=2>　　这可能与读取Excel文件的操作有少少不同，在关闭Excel对象之前，你必须要先调用write()方法，因为先前的操作都是存储在缓存中的，所以要通过该方法将操作的内容保存在文件中。如果你先关闭了Excel对象，那么只能得到一张空的工作薄了。</font></p>
<p align=left><font size=2>&nbsp;</font></p>
<p align=left><font size=2>3. 拷贝、更新Excel工作薄</font></p>
<p align=left><font size=2>　　接下来简要介绍一下如何更新一个已经存在的工作薄，主要是下面二步操作，第一步是构造只读的Excel工作薄，第二步是利用已经创建的Excel工作薄创建新的可写入的Excel工作薄，参考下面的代码片段：(完整代码见ExcelModifying.java)</font></p>
<div align=left>
<p class=code><font size=2>//创建只读的Excel工作薄的对象<br>jxl.Workbook rw = jxl.Workbook.getWorkbook(new File(sourcefile));<br><br>//创建可写入的Excel工作薄对象<br>jxl.write.WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile), rw);<br><br>//读取第一张工作表<br>jxl.write.WritableSheet ws = wwb.getSheet(0);<br><br>//获得第一个单元格对象<br>jxl.write.WritableCell wc = ws.getWritableCell(0, 0);<br><br>//判断单元格的类型, 做出相应的转化<br>if(wc.getType() == CellType.LABEL)<br>{<br>Label l = (Label)wc;<br>&nbsp; l.setString("The value has been modified.");<br>}<br><br>//写入Excel对象<br>wwb.write();<br><br>//关闭可写入的Excel对象<br>wwb.close();<br><br>//关闭只读的Excel对象<br>rw.close();</font></p>
</div>
<p align=left><font size=2>　　之所以使用这种方式构建Excel对象，完全是因为效率的原因，因为上面的示例才是API的主要应用。为了提高性能，在读取工作表时，与数据相关的一些输 出信息，所有的格式信息，如：字体、颜色等等，是不被处理的，因为我们的目的是获得行数据的值，既使没有了修饰，也不会对行数据的值产生什么影响。唯一的 不利之处就是，在内存中会同时保存两个同样的工作表，这样当工作表体积比较大时，会占用相当大的内存，但现在好像内存的大小并不是什么关键因素了。</font></p>
<p align=left><font size=2>　　一旦获得了可写入的工作表对象，我们就可以对单元格对象进行更新的操作了，在这里我们不必调用API提供的add()方法，因为单元格已经于工作表当中，所以我们只需要调用相应的setXXX()方法，就可以完成更新的操作了。</font></p>
<p align=left><font size=2>　　尽单元格原有的格式化修饰是不能去掉的，我们还是可以将新的单元格修饰加上去，以使单元格的内容以不同的形式表现。</font></p>
<p align=left><font size=2>　　新生成的工作表对象是可写入的，我们除了更新原有的单元格外，还可以添加新的单元格到工作表中，这与示例2的操作是完全一样的。</font></p>
<p align=left><font size=2>　　最后，不要忘记调用write()方法，将更新的内容写入到文件中，然后关闭工作薄对象，这里有两个工作薄对象要关闭</font></p>
<img src ="http://www.blogjava.net/imcb/aggbug/126163.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-25 17:33 <a href="http://www.blogjava.net/imcb/archive/2007/06/25/126163.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>sql分页</title><link>http://www.blogjava.net/imcb/archive/2007/06/25/126159.html</link><dc:creator>imcb</dc:creator><author>imcb</author><pubDate>Mon, 25 Jun 2007 09:23:00 GMT</pubDate><guid>http://www.blogjava.net/imcb/archive/2007/06/25/126159.html</guid><wfw:comment>http://www.blogjava.net/imcb/comments/126159.html</wfw:comment><comments>http://www.blogjava.net/imcb/archive/2007/06/25/126159.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/imcb/comments/commentRss/126159.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/imcb/services/trackbacks/126159.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;iSql= "select * from (select a.*,rownum rn from (select procid,procname,actid,actname,applyuser,bussstate,lastuser,proclevel,starttime,allhours,processno,istimeout,etimeout,laststatetime,endtime,formid,ismonitor,lastusername from view_relagisundoassigns "<br>&nbsp;&nbsp;&nbsp;+"where username='"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ userId + "') a where rownum&lt;="+(pageno*10)+") where rn&gt;"+(pageno-1)*10;
<img src ="http://www.blogjava.net/imcb/aggbug/126159.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/imcb/" target="_blank">imcb</a> 2007-06-25 17:23 <a href="http://www.blogjava.net/imcb/archive/2007/06/25/126159.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>