搜尋此網誌

windows常用命令

[ 群組原則 ]
開始 → 執行 → gpedit.msc

[ 惡意軟體移除工具 ]
開始 → 執行 → mrt

[ 機碼 ]
開始 → 執行 → regedit

[ 系統設定公用程式 ]
開始 → 執行 → msconfig

[ 控制client端所有網路設備 ]
開始 → 執行 → cmd → ipconfig
開始 → 執行 → cmd → ipconfig/all

[ 顯示封包經過的路由器的IP位址 ]
開始 → 執行 → cmd → tracert (網址或IP)

2011年12月29日 星期四

SuperBean.java 執行 db.excuteSQL(sql.toString());會出現Exception

參照:
SuperBean.java
public void insert2SYSLog(String action_flag, String[] sqlArray)



解決:在執行db.excuteSQL之前,將sql replace所有\n為空白即可。

原因:java.lang.Exception: java.sql.SQLException: Invalid SQL statement or JDBC escape, terminating ''' not found.
at util.Database.excuteSQL(Database.java:237)
at util.SuperBean.insert2SYSLog(SuperBean.java:334)
at util.SuperBean.insert(SuperBean.java:221)
at org.apache.jsp.cri.nu.crinu010f_jsp._jspService(crinu010f_jsp.java:137)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:386)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at filter.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: Invalid SQL statement or JDBC escape, terminating ''' not found.
at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.java:1155)
at net.sourceforge.jtds.jdbc.SQLParser.parse(SQLParser.java:156)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeImpl(JtdsStatement.java:584)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeUpdate(JtdsStatement.java:1042)
at net.sourceforge.jtds.jdbc.JtdsStatement.executeUpdate(JtdsStatement.java:999)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.logicalcobwebs.proxool.ProxyStatement.invoke(ProxyStatement.java:100)
at org.logicalcobwebs.proxool.ProxyStatement.intercept(ProxyStatement.java:57)
at $java.sql.Wrapper$$EnhancerByProxool$$dde8129e.executeUpdate(<generated>)
at util.Database.excuteSQL(Database.java:233)
... 24 more

2011年12月28日 星期三

【IE】marquee標籤無法運作,沒有錯誤訊息

工具 → 網際網路選項 → 進階

要勾選「多媒體」播放網頁動畫,才會有作用。

2011年12月6日 星期二

Cell Constant Field Values

http://poi.apache.org/apidocs/constant-values.html

http://justdoblogger.com/blog/200911/getcelltype.html

2011年11月29日 星期二

Eclipse Preferences

Formatter
wrap where necessary
包裹在必要時

wrap first element, others where necessary
包裝的第一個元素,其他人在必要時

wrap all elements, indent all but the first element
包裝的所有元素,縮進所有,但第一個元素

wrap all elements, except first element if not necessary
包裝的所有元素,除了第一個元素如果沒有必要

2011年11月8日 星期二

Eclipse 啟動參數

eclipse.exe -nl en_US -clean -vmargs -Xverify:none -XX:+UseParallelGC -XX:PermSize=20M -XX:MaxNewSize=32M -XX:NewSize=32M -Xmx256m -Xms128m

-nl 後面跟的是語言,-nl en_US,介面變成英文。

-clean 是當啟動Eclipse IDE時清空緩衝,一般來說在沒有更新插件的情況下,去掉這個參數啟動速度更快。

-vmargs 使用JRE的參數,後面就是JRE的參數了。

-Xverify:none 去掉JAR包數據驗證,一般來說只有在網絡環境下才需要驗證JAR包數據的有效性。本地的話可以不用驗證。

-XX:+UseParallelGC 使用並行垃圾收集機制,據說這個GC算法比較快。具體不清楚。

-XX:PermSize=20M -XX:MaxNewSize=32M -XX:NewSize=32M 這三個就是設置詳細的緩衝數據了。詳情看Java官方網站的介紹吧。

-Xmx256m Java虛擬機最大使用內存容量,根據你所使用機器的內容大小設置,只要不超過最大內存容量就好。

-Xms128m Java虛擬機初始化內存容量。



2011年10月25日 星期二

倉頡

廍    戈卜口中
磘    一口月人山
萡    廿水竹日
硦    一口一土廿

2011年10月21日 星期五

如何用Apache POI读取Excel


來源

看了网上很多的文章,都是一个样子的,自己研究了下POI,把经验和大家分享下。
首先POI是开源组织Apache出品的一个开源jar包,提供了方便解析Excel的API,我们可以非常方便的使用它来读取Excel。这里介绍3.5Final版本。
所需用到的jar包如下:
如何用Apache <wbr>POI读取Excel
说到Excel,有2003和2007,格式是不一样的,用POI解析的方法也就不一样,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel2007就是使用org.apache.poi.xssf.usermodel来解析。
解析Excel2003源码
StringBuffer content = new StringBuffer();
  HSSFWorkbook workbook = new HSSFWorkbook(is); // 创建对Excel工作簿文件的引用
  for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {
   if (null != workbook.getSheetAt(numSheets)) {
    HSSFSheet aSheet = workbook.getSheetAt(numSheets); // 获得一个sheet
    for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {
     if (null != aSheet.getRow(rowNumOfSheet)) {
      HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一行
      for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {
       if (null != aRow.getCell(cellNumOfRow)) {
        HSSFCell aCell = aRow.getCell(cellNumOfRow); // 获得列值
        
        if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
         content.append(aCell.getNumericCellValue() + "\t");
        } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
         content.append(aCell.getBooleanCellValue() + "\t");
        } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
         content.append(aCell.getStringCellValue() + "\t");
        } else if (aCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){
         content.append(aCell.getCellFormula() + "\t");
        } else {
         continue;
        }
       }
       if(cellNumOfRow == aRow.getLastCellNum()) {
        content.append("\n");
       }
      }
     }
    }
   }
  }
  return content.toString().trim();

解析Excel2007和2003基本一样,只是将HSSFSheet,HSSFCell等都改成XSSFSheet,XSSFCell即可。
另外要提醒大家的是Excel的样式都是基于一个单元格的,所以用HSSFRow.getRowStyle()拿样式会出问题的,不一定会拿到你想要的样式。处理合并单元格是POI的一个难点,只能通过判断当前单元格是否在合并单元格之中,如果是,那此单元格的值便是这个合并单元格的首位置单元格的值,只有通过这样才能来处理合并单元格。
处理合并单元格的代码:

 public static boolean isMergedRegion(HSSFSheet sheet, HSSFCell cell) {
  //得到一个sheet中有多少个合并单元格
  int sheetmergerCount = sheet.getNumMergedRegions();
  for(int i = 0; i < sheetmergerCount; i++) {
   //得出具体的合并单元格
   CellRangeAddress ca = sheet.getMergedRegion(i);
   //得到合并单元格的起始行, 结束行, 起始列, 结束列
   int firstC = ca.getFirstColumn();
   int lastC = ca.getLastColumn();
   int firstR = ca.getFirstRow();
   int lastR = ca.getLastRow();
   //判断该单元格是否在合并单元格范围之内, 如果是, 则返回 true
   if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {
    if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {
     return true;
    }
   }
  }
  return false;
 }


 public static String getMergedRegionValue(HSSFSheet sheet, HSSFCell cell) {
  //获得一个 sheet 中合并单元格的数量
  int sheetmergerCount = sheet.getNumMergedRegions();
  //便利合并单元格
  for(int i = 0; i < sheetmergerCount; i++) {
   //获得合并单元格
   CellRangeAddress ca = sheet.getMergedRegion(i);
   //获得合并单元格的起始行, 结束行, 起始列, 结束列
   int firstC = ca.getFirstColumn();
   int lastC = ca.getLastColumn();
   int firstR = ca.getFirstRow();
   int lastR = ca.getLastRow();
   //判断该单元格是否是在合并单元格中, 如果是, 则返回所在合并单元格的首单元格的值
   if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {
    if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {
     HSSFRow fRow = sheet.getRow(firstR);
     HSSFCell fCell = fRow.getCell(firstC);
     //除了合并单元格首单元格的值, 其余的用(*)来区分
     if (fCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC && hasBorder(cell)) {
      return String.valueOf(fCell.getNumericCellValue());
     } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN && hasBorder(cell)) {
      return String.valueOf(fCell.getBooleanCellValue());
     } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_STRING && hasBorder(cell)) {
      return fCell.getStringCellValue();
     } else if (fCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA && hasBorder(cell)){
      return String.valueOf(fCell.getCellFormula());
     }
    }
   }
  }
  return "";
 }

2011年9月30日 星期五

HSSFCellStyle


HSSFCellStyle有两个背景颜色属性,一个叫FillBackgroundColor,另一个叫FillForegroundColor,但其实这指的都是背景颜色,那为什么还有ForegroundColor呢?为了能够帮助大家理解,我们举一个实际的例子,下面这个图案是Excel的一个单元格:
线是白色的,背景是红色的。这里的线其实就是下面的Excel界面中的图案


至于线的颜色则是图案颜色,即白色。
 下面罗列一下图案样式及其对应的值:
图案样式 常量

HSSFCellStyle.NO_FILL
HSSFCellStyle.ALT_BARS
HSSFCellStyle.FINE_DOTS
HSSFCellStyle.SPARSE_DOTS
HSSFCellStyle.LESS_DOTS
HSSFCellStyle.LEAST_DOTS
HSSFCellStyle.BRICKS
HSSFCellStyle.BIG_SPOTS
HSSFCellStyle.THICK_FORWARD_DIAG
HSSFCellStyle.THICK_BACKWARD_DIAG
HSSFCellStyle.THICK_VERT_BANDS
HSSFCellStyle.THICK_HORZ_BANDS
HSSFCellStyle.THIN_HORZ_BANDS
HSSFCellStyle.THIN_VERT_BANDS
HSSFCellStyle.THIN_BACKWARD_DIAG
HSSFCellStyle.THIN_FORWARD_DIAG
HSSFCellStyle.SQUARES
HSSFCellStyle.DIAMONDS