2008年7月15日 星期二

DB2's way to convert string into date

SQL一二三事
SQL是一種資料庫查詢語言的標準。依尋這些標準,資料庫的設計變得有跡可尋,也讓使用者、資料庫管理者更能方便學習與管理資料庫(以下稱DB)。
然而,各家DB大廠對SQL標準的支持呈度不同,也不知道是在搞什麼特色,讓Jackmis被一個小問題惡搞了兩個小時左右...
#在M$SQL計算日差
DATEDIFF(DAY, GETDATE(), db_date)
DATEDIFF函式會把GETDATE(今天的日期)減掉db_date的日期,並以DAY(日)為準,傳回相差的天數。比如今天是2008/7/15,而db_date的內容是20080720,則結果就是-5

當Jackmis把上面的式子放到DB2的時候...恐怖的來了...
#DB2字元切割
原本想利用date()函數,讓db_date的字元直接換成日期型態...沒想到,DB2的date()比較弱,沒辦法識別。所以我只好把20080720轉成2008-07-20了。
我的首次切法是:
left(db_date,4)+'-'+mid(db_date,5,2)+'-'+mid(db_date,7,2)
結果失敗了。因為
1. DB2的字串相連是用兩個水管符號(︱︱),在網頁上會被拿掉,所以我用全形字。
2. DB2沒有mid函數;這函數的效果是取中間字串的函數,比如mid('abcd',2,2)='bc'才對,但DB2不是這個名字,而是substr(),用法一樣(搞特例)。
然後,改成:
left(db_date,4)︱︱'-'︱︱substr(db_date,5,2)︱︱'-'︱︱substr(db_date,7,2)
得出2008-07-20。但轉日期時還是失敗...
#DB2字元轉日期
這時候,在下已經很想罵人了...看了很多文章發現一些怪怪的現象,於是我試了
substr(db_date,1,4)︱︱'-'︱︱substr(db_date,5,2)︱︱'-'︱︱substr(db_date,7,2)
將left改用substr這個函數。然後再用date函式包起來,就轉成日期型態了!
倒底為什麼不能用left呢?這是個謎...
#在DB2計算日差
最後,GETDATE函式在DB2裡面沒有,請改用current date(或current_date),如下:
days(current date)-days(substr(db_date,1,4)︱︱'-'︱︱substr(db_date,5,2)︱︱'-'︱︱substr(db_date,7,2))

然後就可喜可賀...
神呀...制裁這些讓世界更複雜的人吧...更...

參考資料:
http://www.ibm.com/developerworks/cn/db2/library/techarticles/0211yip/0211yip3.html
http://www.tek-tips.com/viewthread.cfm?qid=1175566&page=1

2008年6月18日 星期三

Authentication of JMeter's testing plan

JMeter一二三事
JMeter是純java的測試工具,常用來做壓力測試。
前言參考:http://blog.pixnet.net/catyku/post/14721791
這位大大已經把基本的功能演練過一次。但是,大大的功能沒有提到最重要的"驗證"這一塊。因為新手總是比較腦殘一點,所以身為腦殘的過來人,就讓小弟介紹如何驗證吧!
驗證測試結果
在您建立的《執行緒群組》→右鍵→《新增》→《驗證》→《驗證回覆》
然後在右邊視窗裡填入正確時預期會出現的字眼。於是,未來在測試時,若沒有通過這個檢查,就會被認為是失敗的測試結果了!

驗證的方式還有更多種,還請各位自己玩看看喔!

不附圖了...因為會吃照片的空間QQ
網路貧民呀...

2008年6月12日 星期四

Securing Web Service with SSL (support jdk 1.3)

在上一篇的文章裡,小弟搞定了WebService基本的使用方式。
然而,為了所謂的"安全需求"(這很重要,只是他X的為什麼要用SSL),所以希望能用SSL技術來達成。

何謂SSL?
它就是指加密通道技術(這個譯名最近好像不用了?)。技術正如其名,就是利用憑證技術把傳輸的通道加密起來。如下:
======受加密保護======
某甲 <-----DATA的安全通道-----> 某乙
======受加密保護======
雖然稱它加密了通道,但事實上加密的還是被傳輸的資訊。這個技術已經愈來愈普及,所以技術上很成熟,能很容易的使用。一個網站如果使用了SSL,那麼你會看到它的連接方式成變成https://,而不是常見的http://了。
Java的SSL
當小弟使用java的URL類別去連接https,馬上就丟出了例外(exception)。上網查了一堆文章,全都在介紹JSSE。但是,JSSE只適用於以往的Java 1.1、1.2(可能還有1.3)版,之後的JSSE其實已經被整進Java裡面了,無須額外安裝或是下載jar檔。
更不需要設什麼安全提供,如:
System.setProperty("java.protocol.handler.pkgs", "com.sun.net.ssl.internal.www.protocol"); Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
一切的一切就只是讓你的jre信任SSL的憑證鍊即可。信任的方法很簡單,在你的jre\lib\security底下有一個cacerts檔。用keytool把SSL的憑證鍊中的每個憑證加進來,就算達到信任了!指令為:
keytool -import -keystore cacerts -file <憑證檔> -alias <給這個資訊任意名稱>
cacerts的預設密碼是changeit。
使用前,可以先copy一份cacerts作為備份。
Web Service混搭SSL
之後,再用Web Service直接去用URL類別連接https就不會有exception了!可喜可賀!(如右上圖)
共勉之
其他參見: