搜尋此網誌

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

2011年9月27日 星期二

備註各種Jar版本

一、POI 3.6
使用.xlsx會出現
org.apache.poi.poifs.filesystem.OfficeXmlFileException: The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)

2011年9月23日 星期五

正規運算式 Regular Expression

JWorld@TW Java論壇 - Java Regular Expression的學習筆記

Pattern (Java 2 Platform SE 6)

正規運算式 Regular Expression

13-4 正規運算式(Regular Expression)

//範例

以下的程式簡單地示範了幾個常用的method:

package demo.regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Regex {

    public static void main(String[] args) {

        // 測試 testString 中是否包含了 aa
        String testString = "ABCaaabcaac";
        System.out.println("String.contains():\t"+testString.contains("aa"));

        // 和上面目的相同,但運用了 regular expression
        // 而這其實是利用了 Pattern 的靜態方法matches()
        System.out.println("String.matches():\t"+testString.matches(".*aa.*"));
        System.out.println("Pattern.matches():\t"+Pattern.matches(".*aa.*",testString));
        System.out.println();

        // 如果要用相同的 regular expression 測試很多資料
        // 可以使用Pattern的靜態方法compile()來編譯
        // 之後就可以重覆使用這個pattern的matcher()方法來進行字串比對
        String testString2 = "aababcAc";
        Pattern pattern = Pattern.compile(".*aa.*");
        Matcher matcher = pattern.matcher(testString);
        System.out.println("matcher.matches():\t"+matcher.matches());
        matcher = pattern.matcher(testString2);
        System.out.println("matcher.matches():\t"+matcher.matches());
        System.out.println();

        // 另外Matcher中還有很多方法可以使用
        // 除了用 matcher.matches()可以比對字串是不是符合regular expression
        // 也可以利用 matcher.lookingAt()比對字串是不是某個regular expression開頭
        pattern = Pattern.compile("aa");
        matcher = pattern.matcher(testString);
        System.out.println("matcher.matches():\t"+matcher.lookingAt());
        matcher = pattern.matcher(testString2);
        System.out.println("matcher.matches():\t"+matcher.lookingAt());
        System.out.println();

        // 想取出字串中符合的區段則可以運用 matcher
        // 例如想從下面四個號碼找出手機的格式
        // 就可以用 matcher.find()及matcher.group()來取出符合的項目
        String testString3 = "0911-111111,             02-22222222      ,             0922-222222      , 03-33333333";
        pattern = Pattern.compile("\\d{4}-\\d{6}");
        matcher = pattern.matcher(testString3);
        while (matcher.find()) {
            System.out.println("matcher.group():\t"+matcher.group());
        }
    }
}

而輸出的結果如下:
String.contains(): true
String.matches(): true
Pattern.matches(): true

matcher.matches(): true
matcher.matches(): true

matcher.matches(): false
matcher.matches(): true

matcher.group():             0911-111111    
matcher.group():             0922-222222    

JavaScript傳中文值

//前一個JSP,optName是下拉選單的名稱

form1.action = "importExcelk.jsp?optName="+form1.fileType.options[form1.fileType.selectedIndex].text;
form1.submit();


//取值的JSP
new String(request.getParameter("aaa").getBytes("ISO-8859-1"), "UTF-8");

2011年9月14日 星期三

讀取檔案,寫入檔案

//讀取
String fileFullPath = "C:\\Documents and Settings\\Irving\\桌面\\LOG_"+getClass().getName()+"_1.txt";
BufferedReader bf = new BufferedReader(new InputStreamReader( new FileInputStream(fileFullPath), "UTF-16LE"));

//寫入
String fileFullPath = "C:\\Documents and Settings\\Irving\\桌面\\LOG_"+getClass().getName()+"_1.txt";

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter ( new FileOutputStream(fileFullPath), "UTF-8"));
            for(int w=0; w<listSQL.size(); w++) {//listSQL要寫入的東西
            bw.write(String.valueOf("第"+ (w+1) + "筆 \n"));
            bw.write(listSQL.get(w));
            bw.write("\r\n");
             bw.flush();
            }


POI Excel


//寫在 try catch

List<String> filelist = getExcelFile(uploadDirectory, fileName);//解壓縮,並把檔案名稱塞入List for(int data=0; data<filelist.size(); data++) { System.out.println("目前讀取 "+(String)filelist.get(data)); POIFSFileSystem pfs = new POIFSFileSystem(new FileInputStream((String)filelist.get(data))); HSSFWorkbook wb = new HSSFWorkbook(pfs); //取sheet System.out.println("共 "+wb.getNumberOfSheets()+" sheet"); for(int sheets=0; sheets<wb.getNumberOfSheets(); sheets++){ HSSFSheet sheet1 = wb.getSheetAt(sheets); HSSFRow row = null; //取row System.out.println("共 "+sheet1.getLastRowNum()+" row");//(從0算起) System.out.println("PhysicalNumber共 "+sheet1.getPhysicalNumberOfRows()+" row");//(從1算起) for(int rowNum=0; rowNum<sheet1.getPhysicalNumberOfRows(); rowNum++) { row = sheet1.getRow(rowNum); //從第6Row開始讀取 // if( (null == row) || ((6-1)>rowNum) ){ // continue; // } //取cell // int tempCT = 0;//沒有隱藏cell的順序 // System.out.println("第 "+String.valueOf(rowNum+1)+" row "+String.valueOf(Integer.valueOf(row.getLastCellNum()))+" cell"); System.out.println("共 "+row.getLastCellNum()+" cell"); for(int cellNum=0; cellNum<row.getLastCellNum(); cellNum++) { // //第1Cell跳過 // if( (1-1)==cellNum ) { // ++tempCT; // continue; // } // //第4Cell,前一Cell,ID沒有取到值,跳下一列 // if( (4-1)==cellNum ) { // if("".equals(personID)) { // break; // } // } // //隱藏欄,跳過 // if(sheet1.isColumnHidden(cellNum)) { // continue; // } HSSFCell cell = row.getCell(cellNum); if(null != cell) { //取出資料 String value = ""; if(cell.CELL_TYPE_NUMERIC == cell.getCellType()) { value = String.valueOf( new Double(cell.getNumericCellValue()).longValue() ); } else if(cell.CELL_TYPE_STRING == cell.getCellType()) { value = cell.getStringCellValue().trim();//去掉值前後半形空白 } System.out.println(value); } } } } }
//=======================================================================

//讀取
POIFSFileSystem pfs = new POIFSFileSystem(new FileInputStream((String)filelist.get(data)));
HSSFWorkbook wb = new HSSFWorkbook(pfs);
//取sheet
for(int sheets=0; sheets<wb.getNumberOfSheets(); sheets++){
HSSFSheet sheet1 = wb.getSheetAt(sheets);
HSSFRow row = null;
//取row
//取row System.out.println("共 "+sheet1.getLastRowNum()+" row");//(從0算起) System.out.println("PhysicalNumber共 "+sheet1.getPhysicalNumberOfRows()+" row");//(從1算起) for(int rowNum=0; rowNum<sheet1.getPhysicalNumberOfRows(); rowNum++) {
row = sheet1.getRow(rowNum);
//從第2Row開始讀取
if( (null == row) || ((2-1)>rowNum) ){
continue;
}

// System.out.println("第 "+String.valueOf(rowNum+1)+" row "+String.valueOf(Integer.valueOf(row.getLastCellNum()))+" cell"); System.out.println("共 "+row.getLastCellNum()+" cell"); for(int cellNum=0; cellNum<row.getLastCellNum(); cellNum++) {
HSSFCell cell = row.getCell(cellNum);
if(null != cell) {
//取出資料
if(cell.CELL_TYPE_NUMERIC == cell.getCellType()) {
System.out.println("數cellType= " +cell.getCellType()+ " ,cellValue= " + String.valueOf( new Double(cell.getNumericCellValue()).longValue() ));
} else if(cell.CELL_TYPE_STRING == cell.getCellType()) {
System.out.println("文cellType= " +cell.getCellType()+ " ,cellValue= " + cell.getStringCellValue().replace(" ", "").trim());//先去掉全形空白,再去掉半形空白
}
}
}
}

}
//=======================================================================
//寫出

2011年9月9日 星期五

處理前端多個檔案上傳


//Parse the request
// List<String> fileDescList = new ArrayList<String>();
List<String> fileNameList = new ArrayList<String>();
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
   FileItemStream item = iter.next();
   String name = item.getFieldName();
   InputStream stream = item.openStream();
   if (item.isFormField()) {
       String value = Streams.asString(stream);
out.println(name + "=" + value+"<br>");
//        if ("filedesc".equals(name)) {
//            fileDescList.add(value);
//        }
   } else {
out.println("File field " + name + " with file name " + item.getName() + " detected.");
       // Process the input stream
       String fieldName = item.getFieldName();
       String fileName = item.getName();
       String contentType = item.getContentType();
out.println("fieldName="+fieldName+"<br>");
out.println("fileName="+fileName+"<br>");
out.println("contentType="+contentType+"<br>");
       if (fileName != null && !"".equals(fileName)) {
           fileName= FilenameUtils.getName(fileName);
out.println("fileName saved="+fileName+"<br>");
           fileNameList.add(fileName);
           File uploadedFile = new File(saveDirectory, fileName);
           FileOutputStream uploadedFileStream =
               new FileOutputStream(uploadedFile);
           Streams.copy(stream, uploadedFileStream, true);
       }
   }
}

String msg[] = null;
for (int i = 0; i < fileNameList.size(); i++) {
//    String fileDesc = fileDescList.get(i);
   String fileName = fileNameList.get(i);
// out.println(fileName+":"+fileDesc+"<br>");

String path = saveDirectory + "\\" + fileName;
String fileType = request.getParameter("fileType");//檔案類型
//System.out.println(fileType);

if(fileType.equals("0")) {
msg = new ImportExcelB().insertData_ADDR(path);
} else if(fileType.equals("1")) {
msg = new ImportExcelB().insertData_GOV99(path);
}
}

2011年9月1日 星期四

SQL Exception

起因:
無法解析 equal to 作業中 "Chinese_Taiwan_Stroke_CS_AS" 與 "Chinese_Taiwan_Stroke_CI_AS" 之間的定序衝突。

解決:

2011年8月31日 星期三

Java Log


common.Logger logger = common.Logger.getLogger(xxx.class);
logger.debug("Hello Log4j, this is debug message");


private static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(xxx.class);
log.debug("Hello Log4j, this is debug message");

2011年8月6日 星期六

Line Numbers

SQL Server Management Studio
Tools → Options → Text Editor → All Languages → (right panel)checkbox against Line numbers。

Eclipse
Editor(left) right mouse → Show Line Numbers。

2011年8月1日 星期一

Eclipse安裝Subversion

參考資料1 - Eclipse Subversive - Documentation

參考資料2 - subclipse: Download and Install

參考資料3 - Version Control with Subversion

取消 Fn+Space 功能鍵

移除「ThinkPad FullScreen Magnifier」的軟體,這個Fn+Space鍵就沒有作用了。

MS SQL Server 不能連線

Network Error IOException: Connection refused: connect
or
Network error IOException: Connection timed out: connect

Causes:
  • The hostname or port number in the config.ini file is incorrect.
  • A Firewall is blocking the SQL Server port.
  • Your version of SQL Server 2000 is too old to support the way Coretalk connects to database.
  • The SQL Server service is not started.
Solutions:
  • Double check to make sure that the hostname and port number is correct and change it if necessary.
  • Open the TCP/IP port for the port number specified in the config.ini file. You would have to first find out what firewall software the client uses and then add an exception to it’s rules for that specific port. There are too many free and commercial firewall systems to list instructions for all of them.
  • This is very unlikely to happen. It will only happen if you install on an existing instance of SQL Server 2000 that has not been updated to SP4. If you can’t connect and everything else seems correct, make sure that it is SP4. If not, download the SP4 update from the Microsoft website and install that first.
  • Start the SQL Server service. You should also go into the service properties and make sure that the startup properties is set so that the service starts automatically.

滑鼠右鍵刪除Subversion的隱藏目錄 .svn&_svn

註冊檔(Registry File)可以設定檔案總管在目錄上的右鍵選單多一個 Delete SVN Folders 功能,你只要在目錄上按下右鍵,然後選擇 
Delete SVN Folders 就會將該目錄以及所有子目錄下的所有 .svn 目錄給刪除掉。
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN]
@="Delete SVN Folders"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\DeleteSVN\command]
@="cmd.exe /k \"TITLE Removing SVN Folders in %1 && FOR /r \"%1\" %%f IN (.svn _svn) DO RD /s /q \"%%f\" \""
 
資料來源

2011年7月30日 星期六

備份eMule的積分、userhash

(需要備份的檔都在eMule的config資料夾下面)
必須要備份的五個檔:
clients.met —— 已知的客戶清單(其它騾友的積分文件也保存在裡面)
cryptkey.dat —— 安全認證密匙(你從別人那裡驗證你的Userhash時需要的安全密匙)
preferences.dat —— 個人UserHash值(存儲你個人的Userhash相關的檔)
preferencesK.dat —— 在kad表明你身份的個人UserHash值(如上 kad在中國很有用)
statistics.ini —— 統計資料(記錄你上傳和下載的量等等0.43及以後版本才有)


根據個人情況需要備份的檔:
server.met----記住你的伺服器清單,如果加為靜態伺服器,即使超過規定次數連不 上也不會被刪掉
known.met----已知檔詳細資料。可以避免每次運行都提交你的檔共用清單。
known2.met----AICH hash相關,存放檔的hashset
staticservers.dat----靜態伺服器清單
emfriends.met -----好友名單

config目錄下檔相關介紹:

AC_IPFilterUpdateURLs.dat IPFilter的更新網址歷史記錄
AC_SearchStrings.dat 搜索關鍵字歷史記錄
AC_ServerMetURLs.dat 更新伺服器清單的網址歷史記錄
adresses.dat 啟動時自動更新伺服器列表的網址
Category.ini 分類的設定檔,包括分類名,注釋,顏色、優先順序別等資訊
clients.met 已知的客戶清單clients.met.BAK 是clients.met的備份,每次EM啟動會自動備份的
cryptkey.dat 安全認證密匙
emfriends.met 好友名單
Fileinfo.ini 共用檔的注釋和檔品質評分
known.met 已知檔詳細資料
known2.met AICH hash相關,存放檔的hashset
preferences.dat 個人UserHash值
preferences.ini 設定檔
server.met 伺服器清單
server_met.old 是server.met的備份,每次EM啟動會自動備份的
shareddir.dat 共用檔的目錄
staticservers.dat 靜態伺服器清單
webservices.dat Web服務設定
打開kad之後會有下麵四個檔
AC_BootstrapIPs.dat Kad中的引導程式的IP位址和埠
nodes.dat 存儲使用者節點
preferencesK.dat和preferences.dat ,在kad表明你的身份的。
k_index.dat 存儲關鍵字的索引檔
s_index.dat 存儲檔資訊的索引檔
用記事本可以打開大部分的檔進行修改的如:
AC_IPFilterUpdateURLs.dat、AC_SearchStrings.dat、AC_ServerMetURLs.dat、
adresses.dat、preferences.ini、shareddir.dat、staticservers.dat、
webservices.dat、AC_BootstrapIPs.dat

積分問題
上傳量越大積分越高。積分是影響QR的主要因素,你積分越高,排隊時間就會縮減的越短。
eMule 使用一種加密方法key handshake以確保積分正確屬於個人。只有在這種方法得到eMule驗證之後,積分才被授權給特定個人,否則eMule將不會承認對方的積分。再則 授權的驗證金鑰儲存在preferences.dat和cryptkey.dat兩個文件中。如果其中一個檔損壞或者丟失,eMule將不會承認原本應 該屬於你的積分。如果你丟失了cryptkey.dat,eMule會強制刪除preferences.dat。

關於Kad說明
Kad(Kademlia)是一種分散式(decentralized)的P2P通信協議,是將所有的使用者連成一個網路,不通過伺服器,從而直接進行搜索資源和來源的操作。可以減低伺服器的負擔。
kad 網路是一種根本不需要伺服器的架構,每個emule用戶端負責處理一小部分search和source finding的工作。分配工作的原理是基於用戶端的唯一id和search或者source的hash之間的匹配來決定。比如說XXX.avi這個檔 由用戶a來負責,則任何用戶共用這個檔的時候都會告訴使用者a我有這個檔,其他用戶去下載這個檔的時候也會詢問a,a告訴他們誰有這個文 件,source finding就完成了。至於如何找到用戶a則是通過一種將使用者id異或的方式,兩個id的二進位異或值決定他們之間的邏輯距離,比如1100距離 1101要比距離1001近。當一個使用者加入kad網路後,首先通過一個已知的用戶找到一批用戶的id和port。當此用戶a要尋找某特定用戶x時,a先 詢問幾個已知的邏輯距離x較近的用戶,如x1,x2,x3會告訴a他們知道的更加近的用戶的id和port,一次類推,a最終就能找到x。

信用系統(Credit system)
eMule的“選項”-“擴展設置”裡可以設置啟用信用系統--Credit system(受益上傳者)。
如 果你啟用了這個Credit system,那你的eMule 5個月後就會出現客戶被刪除的資訊。那這個信用系統(Credit system)是用來讓上傳者受益的。舉個簡單的例子,比如A給B上傳了,那麼B就會記下A的UserHash。如果下次張A要下載B的東西時,B就會給 A的評分比普通的用戶高。這樣A在B這兒就可以少排隊或者不排隊進入下載。當然,A和B建立的這種信用的評分關係只能持續5個月,如果5個月內兩個用戶都 沒有再建立過連接,就會出現上面的被刪除。這也就是我們為何要加大上傳原因。因為上傳多了後給你帶來的好處就是以後你下載東西時可以少排隊或者不排隊。所 以,大家對自己的UserHash要加倍的珍惜,特別是上傳量大的朋友,經常備份config下的檔。一旦UserHash變了,你和其他騾騾建立的這 種信用關係也就沒了。



資料來源

JSP執行後,出現錯誤

錯誤訊息:
嚴重的: Servlet.service() for servlet jsp threw exception
java.sql.SQLException: 插入錯誤: 資料行名稱或提供的數值數量與資料表定義不相符。

2011年7月28日 星期四

三疊字,怎麼唸?? (轉載)

三個「金」-->鑫:ㄒ|ㄣ,興盛、多財。
三個「木」-->森:ㄙㄣ,1.樹木濃密的樣子。2.眾多的。
三個「水」-->淼:ㄇ|ㄠˇ,水流廣大的樣子。
三個「火」-->焱:|ㄢˋ,火花、火焰。
三個「土」-->垚:|ㄠˊ,1.土高起的樣子。2.「堯」之異體。
三個「石」-->磊:ㄌㄟˇ,眾多石塊累積在一起。
三個「虫」-->蟲:ㄔㄨㄥˊ,昆蟲的總稱。
三個「日」-->晶:ㄐ|ㄥ,光輝。
三個「力」-->劦:ㄒ|ㄝˊ,合力、同力。
三個「刀」-->刕:ㄌ|ˊ,1.姓。2.割。
三個「口」-->品:ㄆ|ㄣˇ,1.眾多的。2.某一類東西的總稱。3.事物的種類。4.等級。 5.人的德性。 6.評量、評斷好壞優劣。
三個「犬」-->猋:ㄅ|ㄠ,1.犬急奔。2.暴風。同「飆」。
三個「女」-->姦:ㄐ|ㄢ,1.邪惡小人、犯法作亂的人。2.發生不正當的性行為。3.狡詐、邪惡。
三個「子」-->孨:ㄓㄨㄢˇ,1.或通「孱」。2.孤露可憐。3.孤兒。
三個「牛」-->犇:ㄅㄣ,「奔」之異體。
三個「魚」-->鱻:ㄒ|ㄢ,「鮮」之異體。
三個「鹿」-->麤:ㄘㄨ,1.超遠、遙遠。2.「粗」之異體。
三個「馬」-->驫:ㄅ|ㄠ,眾馬走貌。
三個「耳」-->聶:ㄋ|ㄝˋ,附在耳邊小聲說話。
三個「車」-->轟:ㄏㄨㄥ,1.形容巨大的聲響。2.擊震。
三個「直」-->矗:ㄔㄨˋ,1.向上高聳直立。2.草木茂盛。
三個「毛」-->毳:ㄘㄨㄟˋ,1.鳥獸的細毛。說文解字:「毳,獸細毛也。」2.脆弱、不堅韌。通「脆」。
三個「白」-->皛:1.ㄐ|ㄠˇ,明顯,明亮。2.ㄆㄛˋ,拍、打。
三個「手」-->掱:ㄕㄡˇ,扒手。
三個「心」-->惢:ㄙㄨㄛˇ,心疑、多慮。
三個「田」-->畾:1.ㄌㄟˊ,田間之地。2.「雷」之異體。3.「壘」之異體。
三個「舌」-->舙:ㄏㄨㄚˋ,「話」之異體。
三個「龍」-->龘:ㄊㄚˋ,龍飛之貌。
三個「貝」-->贔:ㄅ|ˋ。1.贔風:暴怒的風。2.贔屭:A.用力的樣子。文選.張衡.西京賦:「綴以二華,巨贔屭。」B.動物名。龜類,好負重,舊時碑下所刻仙龜怪物即是。
三個「羊」-->羴:ㄕㄢ,「羶」之異體字。羊身上的臊味。
三個「草頭」-->芔:1.ㄏㄨㄟˋ,卉,草類植物的總稱。2.ㄙㄚˋ,「卅」之異體字。
三個「ㄙ」-->厽:1.ㄌㄟˇ。2.ㄌㄟˋ。3.ㄌㄟˊ,「累」之異體。
三個「又」-->叒:1.ㄖㄨㄛˋ。2.ㄖㄜˇ,「若」之異體。
三個「吉」-->嚞:ㄓㄜˊ,「哲」之異體,也可寫作「喆」。
三個「隹」-->雥:ㄗㄚˊ,群鳥。
三個「言」-->譶:ㄊㄚˋ,疾言也。
三個「止」-->歮:ㄙㄜˋ,「澀」之異體。
三個「士」-->壵:ㄓㄨㄤˋ,「壯」之異體。
三個「飛」-->飝:ㄈㄟ,「飛」之異體。
三個「香」-->馫:ㄒ|ㄥ,香氣也。
三個「雷」-->靐:ㄅ|ㄥˋ,雷聲也。
三個「泉」-->灥:1.ㄒㄩㄣˊ,三泉相通。2.ㄑㄩㄢˊ,「泉」之異體。
三個「小」-->尛:「麼」之異體。

2011年7月27日 星期三

廢掉GoogleUpdate.exe,不要讓它開機就常駐

一、Rename這個exe檔
C:\Documents and Settings\<<User Name>>\Local Settings\Application Data\Google\Update\GoogleUpdate.exe



二、刪掉排程Task Scheduler
開始 → 所有程式(P)  附屬應用程式 → 系統工具 → 排定的工作

2011年7月22日 星期五

解決在首頁要登入2次

「網際網路選項」→「安全性」→「雜項」顯示混合內容 → 啟用

2011年7月19日 星期二

2011年7月14日 星期四

手動還原資料庫

restore DATABASE ABCD
from disk='C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQL2008\MSSQL\Backup\20110701ABCD'
with
move 'ABCD' to 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQL2008\MSSQL\DATA\ABCD.mdf',
move 'ABCD_Log' to 'C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQL2008\MSSQL\DATA\ABCD.ldf'
,NoRecovery
,Replace
go

各資料庫的JDBC URL、setup JDBC datasource、設置JDBC連接資料來源、JDBC連線字串大雜燴

2011年7月11日 星期一

2011年7月4日 星期一

【IE8】登入成功後,卻無法顯示已登入的狀態

※ 目前Blogger好像已經修正 ※

登入後,畫面還是顯示

修改 網際網路選項 → 隱私權 → 設定 → 接受所有Cookie

修改後,隨即顯示

2011年6月14日 星期二

2011年6月12日 星期日

【藍底白字錯誤訊息】PAGE_FAULT_IN_NONPAGED_AREA

A problem has been detected and windows has been shut down to prevent damage to your computer.

PAGE_FAULT_IN_NONPAGED_AREA

If this is the first time you've seen this stop error screen, restart your computer. If this screen appears again, follow these steps:

check to make sure any new hardware or software is properly installed. If this is a new installation, ask your hardware or software manufacturer for any windows updates you might need.

If problems continue, disable or remove any newly installed hardware or software. Disable BIOS memory options such as caching or shadowing. If you need to use Safe Mode to remove or disable componets, restart your computer, press F8 to select Advanced startup options, and then select Safe Mode.

2011年6月3日 星期五

DbVisualizer 出現 Virtual Memory Problem的錯誤訊息

原因:
Virtual Memory Problem! The application is running low on virtual memory. Open Help->Online Resources and choose the FAQ page. It explains how to increase the memory for Java (DbVisualizer).
Stack Trace:
java.lang.OutOfMemoryError: Java heap space

2011年5月23日 星期一

Charset:aliases()

import java.nio.charset.Charset;
import java.util.Iterator;
import java.util.Map;

public class Main {

  public static void main(String[] args) {
    Map charsets = Charset.availableCharsets();
    Iterator iterator = charsets.values().iterator();
    while (iterator.hasNext()) {
      Charset cs = (Charsetiterator.next();
      System.out.print(cs.displayName());
      if (cs.isRegistered()) {
        System.out.print(" (registered): ");
      else {
        System.out.print(" (unregistered): ");
      }
      System.out.print(cs.name());
      Iterator names = cs.aliases().iterator();
      while (names.hasNext()) {
        System.out.print(", ");
        System.out.print(names.next());
      }
      System.out.println();
    }
  }
}

2011年5月20日 星期五

FileReader、BufferedReader、將檔案的內容一行行取出

FileReader fr = new FileReader(filePath);
BufferedReader bf = new BufferedReader(fr);
while (null != (line=bf.readLine())) {

}

FileInputStream、InputStreamReader、取得該檔案的編碼名稱

FileInputStream fis = new FileInputStream(filePath);
InputStreamReader isr = new InputStreamReader(fis);
String encode = isr.getEncoding();

2011年5月11日 星期三

Notepad++ hotkey

區塊模式編輯,也稱作直欄模式(Column mode)。
熱鍵[ALT + 滑鼠左鍵]或是[ALT + Shift + Arrow keys]。
========================================================
參考網站

2011年5月3日 星期二

資料維護畫面(查詢、新增、刪除、修改) 問題集

原因:
queryAll正常, 點選list其中一筆, 執行queryOne後, 有些值無法傳至上方form位置。
解決:
將所有變數第一個字元改成小寫, 即可正常運作。
特殊:
LName,前兩個字元都得小寫lname。

原因:
查詢後,所有欄位變成可輸入狀態。
解決方式:
在<body> onLoad加入whatButtonFireEvent('<%=obj.getState()%>');

2011年4月22日 星期五

地址sql

    sql.append("(select addr.addrName from SYSCA_Addr as addr where 1=1 and addr.addrKind ='1' and addr.addrID = person.homeAddr1) as ihomeAddr1, ").append("\n");
    sql.append("(select addr.addrName from SYSCA_Addr as addr where 1=1 and addr.addrKind ='2' and addr.addrID = person.homeAddr2) as ihomeAddr2, ").append("\n");
    sql.append("(select addr.addrName from SYSCA_Addr as addr where 1=1 and addr.addrKind ='3' and addr.addrID = person.homeAddr3) as ihomeAddr3, ").append("\n");



select addr.addrName from SYSCA_Addr as addr where 1=1 and addr.addrKind ='1' and addr.addrID = person.homeAddr1) as ihomeAddr1, 
select addr.addrName from SYSCA_Addr as addr where 1=1 and addr.addrKind ='2' and addr.addrID = person.homeAddr2) as ihomeAddr2,
select addr.addrName from SYSCA_Addr as addr where 1=1 and addr.addrKind ='3' and addr.addrID = person.homeAddr3) as ihomeAddr3,

【SQL】函數coalesce()

coalesce(欄位名, '')
當欄位名的值為null,null轉成''


使用時機:某欄位當條件時,該欄位的值,有null、有空值

在word、excel下,點擊滑鼠右鍵,閃一下就消失了?!

元兇是Babylon增益集元件,取消勾選,即可正常使用。



2011年4月13日 星期三

StringBuffer

  • 清空目前存在StringBuffer的字串
StringBuffer.setLength(0);
也可重新
new StringBuffer();

2011年3月30日 星期三

MS SQL Server 2008單一table匯入資料時,出現錯誤


解決:
資料來源 → 進階 → 修改OutputColumnWidth大小。


原因:
- 正在執行 (錯誤)
訊息
錯誤 0xc02020a1: 資料流程工作 1: 資料轉換失敗。資料行 "title" 的資料轉換傳回狀態值 4 和狀態文字 "文字已截斷,或者一或多個字元在目標字碼頁裡沒有相符者。"。
 (SQL Server 匯入和匯出精靈)

錯誤 0xc020902a: 資料流程工作 1: 因為發生截斷,且 "輸出資料行 "title" (30)" 的截斷資料列配置指定在截斷時失敗,所以 "輸出資料行 "title" (30)" 失敗。在指定的元件上,指定的物件發生截斷錯誤。
 (SQL Server 匯入和匯出精靈)

錯誤 0xc0202092: 資料流程工作 1: 處理資料列 -79769263652470765 上的檔案 "C:\Documents and Settings\username\桌面\0809_SYSAP_DTREE.txt" 時發生錯誤。
 (SQL Server 匯入和匯出精靈)

錯誤 0xc0047038: 資料流程工作 1: SSIS 錯誤碼 DTS_E_PRIMEOUTPUTFAILED。在 元件 "來源 - 0809_SYSAP_DTREE_txt" (1) 上的 PrimeOutput 方法傳回錯誤碼 0xC0202092。當管線引擎呼叫 PrimeOutput() 時,元件傳回失敗碼。在此之前可能已公佈過錯誤訊息,說明有關此失敗的詳細資訊。
 (SQL Server 匯入和匯出精靈)

2011年3月28日 星期一

安裝MS SQL Server 2008後, 所有中文變成亂碼

原因可能是下列軟體導致,先移除再裝SQL Server:
Microsoft AppLocale
Microsoft Windows Application Compatibility Database

2011年3月24日 星期四

【Tomcat 5.0】IllegalArgumentException

原因:
java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535)

【Tomcat 5.0】OutOfMemoryError

解決:
在Eclipse中Tomcat的JVM Setting,加入-Xms256m -Xmx1024m,重新啟動Tomcat即可。

原因:
Exception in thread "Prototyper" java.lang.OutOfMemoryError: Java heap space
Exception in thread "ContainerBackgroundProcessor[StandardEngine[Catalina]]" java.lang.OutOfMemoryError: Java heap space

2011年3月23日 星期三

【Tomcat 5.5】IOException

原因:
18:19:59,435 ERROR [jsp]:253 - Servlet.service() for servlet jsp threw exception
java.io.IOException

2011年1月31日 星期一

DbVisualizer 查詢資料,顯示中文?!

DbVis 支持中文
在连接URL中, 增加
DB_LOCALE=en_us.819;CLIENT_LOCALE=en_us.57372;NEWCODESET=GBK,8859-1,819

範例:
jdbc:informix-sqli://<ip>:<port>/<dbname>:informixserver=<servername>;DB_LOCALE=en_us.819;CLIENT_LOCALE=en_us.57372;NEWCODESET=GBK,8859-1,819



http://www.javaworld.com.tw/jute/post/view?bid=14&id=236050

http://www.cnetnews.com.cn/2008/0618/934811.shtml

http://pank.org/blog/2008/07/dbvisualizer.html