2013年3月26日 星期二

【筆記】在MySQL中做字串連接

MySQL(5.5.22)中,做字串連接,是不可以用「+」,如:
select `name` + ' is here' from user
結果會是:0

要做字串連接,要用Concat這個function,如:
select CONCAT(`name`,' is here') from user

結果就會是:bigbear is here

參考文件

jar for com.sun.xml.ws.transport.http.servlet.WSServlet


在使用jax-ws時,有時在web.xml會用WSServletContextListener和WSServlet兩個類別,如:



    
        
            com.sun.xml.ws.transport.http.servlet.WSServletContextListener
        
    ...



這兩個類別所在的jar,要從http://jax-ws.java.net/2.2.7/這邊下載,找到左方的[Download RI],就可以下載所需的版本。

2013年3月16日 星期六

[Solved]The java content assist doesn't work

When using Eclipse, the content assist should work after we typed "." after a variable to show the candidate method or property list. If it doesn't work, you can check the java content assist setting in Eclipse. Go to Windows > Preferences to open the window as follow:


Find the settings: Java > Editor > Content Assist > Advaned. In the up right area, checking if the Java Proposals is checked. If not, check it. And the content assist should works.

2013年3月14日 星期四

【筆記】MySQL版本不同,subquery order by結果不同

今天遇到一個問題,用下列的語法先做一次sub query,再對sub query去select,在一個DB中,結果會如小弟預期的,以id這欄位做由大至小排序,但在另一個DB中,結果卻以id做由小至大排序。

select * from (
     select * from mytable a order by id desc
) s;

查明之後,才暸解這是因為MySQL版本的問題,在5.2之前的MySQL,結果會如預期地由大至小排序,但在5.3之後的版本,在sub query外再做select,裡面的排序就沒作用。

2013年3月13日 星期三

【解決】使用Eclipse時,自動完成(content assist)沒有作用

在使用Eclipse時,通常打出一個變數後再按.,應該就會跑出一串相關的方法(method)或屬性來選擇,但有時怎麼按也按不出來。

喔!我的海神王啊!怎麼辦?


這時,就先去檢查一下EclipseJava Content Assist的設定。

點按【Windows】→【Preferences】開啟下列的對話窗:


找到【Java】→【Editor】→【Content Assist】→【Advanced】,在右上方的區塊中,主要是看【Java Proposals】這個選項有沒有勾,若沒有,勾起來按確定,就能使用方便的Content Assist功能了。

2013年3月12日 星期二

【分享】使用Eclipse Debug時,中斷點也可以設條件

小弟覺得Eclipse的Debug是個好用的工具,Debug超方便的,相信很多Eclipse的使用者也都用得很開心,但就我身邊的同事們而言,很少人知道Debug設中斷點,也可以針對中斷點設條件,使中斷點在某些條件下才停在那邊,對Debug而言,真是事半功倍。

這麼好用的功能,其實設定很簡單,請參考:

第一步就是在你要Debug的那一行程式設一個中斷點:


在中斷點(就是那個小綠點)上按滑鼠右鍵,再點選最下方的【Breakpoint Properties...】


再來會開啟一個對話窗,把「Conditional」勾起來,在下方文框中輸入你的條件,請注意,這邊可以設定的變數,必須是在中斷點前就己宣告的變數,如上的int i


以Debug模式執行時,在i等於100,即為滿足剛才設定的條件時,才會停在該中斷點:


這一招在複雜的程式或處理較久的迴圈中,對於找出問題很有幫助。

MS SQL Server LEN vs. DATALENGTH

在使用
select LEN(columnName) from tableName
時,其中的「columnName」需為字串型態,LEN回傳這字串中的字元數有多少。
而使用

select DATALENGTH(columnName) from tableName

時,回傳值是「columnName」欄位包含的位元(bytes)數,其欄位型態可以為任意型態。


2013年3月9日 星期六

【筆記】在MS SQL Server中實現MySQL limit的做法

MS SQL Server中,雖然有top的用法,但要做到像MySQL那樣,有limit 1, 1000這種做法,下列是一種方式:

SELECT * FROM ( 
 SELECT *, ROW_NUMBER() OVER (ORDER BY id) as row 
 FROM myTable) a 
WHERE row > 5 and row <= 10
要注意的是,上列用法,只有在SQL Server 2005以後的版本才能使用。

2013年3月4日 星期一

SQL Server中動態地利用join來做update


SQL Server中動態地利用join來做update,如下例中,我們要把B Table中的Name欄位update為A Table中對應的Id的Name欄位的值:

A Table
-------------------------
Id Name
-------------------------
1 abc
2 cde
3 efg
4 stu
5 xyz
-------------------------

B Table
-------------------------
Id Name
-------------------------
1 a1
2 b1
3 c1
4 d1
5 e1
-------------------------
update B set name = a.name from B b inner join A a on a.id = b.id
參考:http://stackoverflow.com/questions/11247982/update-multiple-rows-using-select-statement