2015年4月19日 星期日

oracle型態分類

while(rs.next()){
        //取得欄數
        ResultSetMetaDatarsmd=rs.getMetaData();
        intrs_count=rsmd.getColumnCount();
        setLog4J("info","oracle2mysql","欄位數量:"+rs_count+"<br>");
        //取得欄位型態
        for(intii=1;ii<=rs_count;ii++){
                setLog4J("info","oracle2mysql","ColumnName:"+rsmd.getColumnName(ii)+""+
        "type:"+rsmd.getColumnType(ii)+""
        );
        if(java.sql.Types.VARCHAR==rsmd.getColumnType(ii)){
                setLog4J("info","oracle2mysql","type:varchar");  
        }
        elseif(java.sql.Types.DATE==rsmd.getColumnType(ii)){
                setLog4J("info","oracle2mysql","type:date");
        }
        elseif(java.sql.Types.NUMERIC==rsmd.getColumnType(ii)){
                setLog4J("info","oracle2mysql","type:numeric"); 
                setLog4J("info","oracle2mysql","precision:"+rsmd.getPrecision(ii)+""+
        "scale:"+rsmd.getScale(ii)
        );
        }
        elseif(java.sql.Types.LONGVARCHAR==rsmd.getColumnType(ii)){
                setLog4J("info","oracle2mysql","type:longvarchar");   
        }
        elseif(java.sql.Types.BLOB==rsmd.getColumnType(ii)){
                setLog4J("info","oracle2mysql","type:blob");
        }
        elseif(java.sql.Types.LONGVARBINARY==rsmd.getColumnType(ii)){
                setLog4J("info","oracle2mysql","type:LONGVARBINARY");   
        }
       
                setLog4J("info","oracle2mysql",rs.getString(ii));
        }
}

2015年4月16日 星期四

windows測試連線

telnet (ip) (port)

進去後卡死在裡面的話,按Q就可出來。

2015年4月13日 星期一

java File讀檔案列表


當要讀檔案列表使用類似下面程式,File.list()其實不能保證順序。
       

public static void main(String[] args) {
        
 File a = new File("data");
        
 String[] filenames;
 String fullpath = a.getAbsolutePath();
        
 if(a.isDirectory()){
  filenames=a.list();
  for (int i = 0 ; i < filenames.length ; i++){         
   File tempFile = new File(fullpath + "\\" + filenames[i]);
   if(tempFile.isDirectory()){
    System.out.println("目錄:" + filenames[i]);
   }
   else
    System.out.println("檔案:" + filenames[i]);
   }
  }
 else{
  System.out.println("[" + a + "]不是目錄");
 }

}


一般人跑出來的順序多半是字母順序,但這不是每個平台都一致的。


 比較好的方法是用定義的Comparator排序一下才能確定順序。


一種改寫方式如下:




    
public class fileNameReadTest {
    
 public static void main(String[] args) {
  
        File a = new File("data");
        
        File[] allfile;
        String[] filenames;
        String fullpath = a.getAbsolutePath();
        
        if(a.isDirectory()){
          filenames = a.list();
          allfile = a.listFiles();
          Arrays.sort(allfile, lastModified);
          for (int i = 0 ; i < filenames.length ; i++){         
            File tempFile = new File(fullpath + "\\" + filenames[i]);
            System.out.println("自然排序:" + filenames[i] + ", 時間排序:"+ allfile[i].getName());
          }
        }
        else{
          System.out.println("[" + a + "]不是目錄");
        }
      
    }
 
 private static final Comparator lastModified = new Comparator() {
  @Override
  public int compare(File o1, File o2) {
   return o1.lastModified() == o2.lastModified() ? 0 : (o1.lastModified() < o2.lastModified() ? 1 : -1 ) ;
  }
 };
     
}

本例子示範以最後修改時間方式排序,也可自行定義其他方式排序。


以下順便介紹常用的File處理會使用到的API。


FilenameFilter

這是一個interface,定義完後可以自行選擇要讀入的檔案名稱條件。
例如:
  

final List files = java.util.Arrays.asList("c", "b", "a");
FilenameFilter filenameFilter = new FilenameFilter() {
 public boolean accept(File dir, String name) {
  return files.contains(name);
 }
};
File[] ondisk = new File(".").listFiles(filenameFilter);

P.S.:
1. File.list() 功能為取得目錄下檔案名稱字串
2. File.listFiles() 功能為取得目錄下檔案
3. 想要真正的字母排序(包含大小寫判斷)要使用apache commonIO函式庫NameFileComparator

2015年4月12日 星期日

snmp簡易操作教學

會用到snmp的人員應該很少,
但是這是系統維運人員必備的知識。
以下簡單列出一些基本用法。


查數值
snmpwalk -v2c -c (密碼) (IP) (node, ex: .1.3.6.1.4.1.2021.4.14)

完整表格說明與數值
snmptable -c (密碼) -v 1 (IP) (參數, ex: HOST-RESOURCES-MIB::hrStorageTable)

查項目名稱
snmpwalk -v2c -c (密碼) (IP) (參數, ex: hrStorageDescr)

查系統資訊
snmpwalk -v2c -c (密碼) (IP) system

參數意義
-v2c 表示snmpwalk版本
-c community

snmptranslate
轉換oid與mib name, 查本機mib架構
snmptranslate -Of (node, ex: .1.3.6.1.4.1.2021.11.11.0)
snmptranslate -On (node, ex: .iso.org.dod.internet.private.enterprises.ucdavis.systemStats.ssCpuIdle.0)
-Of 數字轉文字
-On 文字轉數字

snmpwalk也可使用-On -Of
ex. snmpwalk -v2c -c (密碼) -Of (IP) hrStorageUsed

實例練習:
snmp如何取得linux之memory使用量

用snmp求出下列數值
.iso.org.dod.internet.private.enterprises.ucdavis.memory.memTotalReal
.iso.org.dod.internet.private.enterprises.ucdavis.memory.memAvailReal
.iso.org.dod.internet.private.enterprises.ucdavis.memory.memBuffer
.iso.org.dod.internet.private.enterprises.ucdavis.memory.memCached

一般memory計算只要使用 memAvailReal/memTotalReal 即可算出空閒memory數量,
但由於linux不會讓memory擺著浪費,會主動把剩下的memory挪作他用,
因此這樣算出之數值會無法反映現況,會搞得系統維運人員認為memory滿載。

比較正確之算法應該使用 
(memTotalReal-(memAvailReal+memBuffer+memCached))/memTotalReal
這樣就能正確反映使用者程式所消耗後,剩餘可用memory之數量

2015年4月10日 星期五

開站紀念

這是第一篇文章!!

本網誌將會記錄一些學習程式的學習筆記,
歡迎大家留言!

目前計畫會寫一些關於 jQuery, javascript, jsp, jsf 等的主流網頁技術。

還會寫一些相關的好用開源API的介紹,像是quartz, iReport, ApachePOI, mysql等...

敬請期待!!