2009年8月13日 星期四

[SQL]查詢欄位是否有重複資料

SELECT 欄位名稱
FROM 表格名稱
GROUP BY 欄位名稱
HAVING (COUNT(欄位名稱) > 1)

2009年8月11日 星期二

Tomcat shutdown不完全的問題

自從整合quartz後
在solaris環境下shutdown tomcat
下ps指令還可以看到程序的process
必須手動kill掉

由於已確定是整合quartz後才發生
自然朝這個方向研究
就觀察結果猜測跟quartz thread不是daemon類型有關
如果shutdown完quartz thread還在使用
就可能造成這樣的情形

當下解決的想法有兩個
1.在tomcat shutdown前先將quartz scheduler shutdown
2.將quartz thread停止

著手實驗後
將scheduler shutdown
再關掉tomcat
就沒有發生這種情形了!

順便紀錄一下
關於這次如何在tomcat shutdown前執行
1.ServletContextListener
2.shutdown hook
3.quartz的shutdownHook plugin
最後是選擇用ServletContextListener來處理

過程中發現shutdown hook
似乎在solaris下執行.sh腳本來shutdown tomcat時無法使用
而window下直接在工作管理員關閉也無法偵測到
可能shutdown hook只針對syste.exit()和Ctrl+c這兩種狀況吧!?

推薦一個Blog 隔夜黃鶯
Quartz的文件翻譯的不錯
也跟他請教過不少問題

2009年8月10日 星期一

Control character in cookie value, consider BASE64 encoding your value

在例行性的查看log過程中看到這個exception
便開始著手解決這個問題

在網上搜索了一下
得到原因是
值含有控制字元所以無法保存到cookie裡
可能是中文字在編碼時出現亂碼導致有控制字符的出現

解決的方法就是存值跟取值都進行編碼的動作
public void addCookie(String name, String value)
{
int maxAge = 3600 * 24 * 30;
try{
if (value == null) {
maxAge = 0;
value = "";
}else{
value = URLEncoder.encode(value,"UTF-8");
}
}catch(Exception e){
}
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(maxAge);
cookie.setPath("/");

response.addCookie(cookie);
}

public String getCookie(String name)
{
String value = "";
Cookie[] cookies = request.getCookies();

if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
Cookie c = cookies[i];
if (c.getName().equals(name)) {
try{
value = URLDecoder.decode(c.getValue(),"UTF-8");
}catch(Exception e){
}
return value;
}
}
}

return value;
}