2014年5月14日 星期三

JSP+Tomcat7如何使用JNDI連上MSSQL資料庫

網路上說明JNDI的文章不多
會提到MSSQL的文章更少 (大都教MySQL)
好死不死 我新派遣的公司就是用MSSQL = =+

網路上找半天,拼湊了半天,卻都不成功。
最後被我放在家的天書救了。

紀錄以下通用範例:

2014年4月10日 星期四

Bitnami Redmine 升級

不知道怎的,Redmine被我搞壞了,哈。 (苦笑
只好埋頭苦修,最後不管如何回朔,如何覆蓋,DELETE跟UPDATE都會有問題。 U_U

最後想說,好吧,那我直接把Bitnami Redmine 2.4 升級到 2.5版,總可以了吧。

下面就是得出步驟:

1. 先把2.4版先完整備份,然後關閉Redmine
> tar -czvf redmine-backup.tar.gz /opt/redmine /*backup 整個 redmine*/
> sudo sh ./mysqldump -u username -p bitnami_redmine > backup.sql /*dump出整個DB(重要)*/

2. 把原本的檔案更名 (方便新版灌進來用原有名稱)
> sudo mv redmine/ redmine-2.4/

3. 把新的Bitnami Redmine灌進去 (記得確認32/64版,還有改權限)

4. 按照原設定安裝

5. 將備份的DB 灌回新的DB
> ./mysql -u root -p bitnami_redmine < backup.sql

6. (重要)移植DB程序 (沒有安裝ruby 記得先裝[sudo apt-get install ruby])
> 1) cd /opt/redmine/apps/redmine/htdocs
> 2) ruby bin/rake db:migrate RAILS_ENV=production

7. 啟動Redmine
> sudo sh /opt/bitnami/ctlscript.sh restart

[後續]
成功升級之後,回頭想想之前,搞不好做了第6步的 移植DB程序 就可以修復成功?

2014年4月7日 星期一

MySQL dump

常常忘記MySQL dump怎麼用,乾脆在這邊紀錄一下
其實很簡單:
dump出整個DB
sudo sh ./mysqldump -u username -p dbname > destination.sql

dump出某TABLE
sudo sh ./mysqldump -u username -p dbname tblname > destination.sql

[後續]
備註一下: dump的時候MySQL是要啟動的狀態,不然dump程式會連不上

2014年3月31日 星期一

如何遠端連線到MYSQL DB SERVER

假設我們的MySQL DB伺服器架在192.168.0.103
我現在想要用192.168.0.101 連過去
如果沒有設定的情況下
DB SERVER只接受localhost連線 也就是127.0.0.1
所以就算我有帳號密碼也會連不上 因為DB根本不知道自己是.0.103

所以要去my.cnf這個設定檔去做設定
找到這句:
bind-address = 127.0.0.1
並將IP改成自己在網絡上的IP (或實體IP)
本範例為: 192.168.0.103

接著192.168.0.101這台就可以直接存取囉
(當然帳號與權限得在MySQL這邊先設定好)

[後續]
後來發現光這樣做,原先寫在程式裡面的getConnection()方法使用localhost去連會出錯 (原因是已經變成遠端連線,所以本端連線會失效)

因此要把本端連線也改成用IP去連,這樣就可以了。

2014年3月13日 星期四

JSP導出Excel奇怪的亂碼問題

出處: JSP導出Excel奇怪的亂碼問題

遇到跟連結中作者一樣的問題,JSP導出EXCEL一般情況都好好的,但就是資料少的時候會出現亂碼。

文中提到

<%  
    //就是靠這一行,讓前端瀏覽器以為接收到一個excel檔   
    response.setHeader("Content-disposition" ,"attachment; filename=Excle.xls");     
%> 

就是解決關鍵,我自己的檔案中原本是inline,改成attachment之後就沒問題囉!!

感謝作者。

[後續]
不知道為什麼,後來又跑一次CODE又失敗了,只好繼續找答案,這次找到這個:

要在寫入EXCEL的時候先寫這段: 
//PrintWriter op = response.getWriter();
op.write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");

整段如下:
<%  
//將產生的排行表導入EXCEL檔,以供下載
    try{
   response.reset();        
   String fileName =  request.getParameter("fileName");  
   response.setHeader("Content-disposition","attachment; filename=Ranking_" + fileName); 
   response.setHeader("Pragma", "no-cache");
   response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
   response.setHeader("Cache-Control", "pre-check=0, post-check=0, max-age=0");
   response.setHeader("Content-Transfer-Encoding", "binary");
   response.setHeader("Content-Encoding", "UTF-8");
   response.setHeader("Expires", "0");
   response.addHeader("Accept-Language", "zh-tw");
   response.setContentType("application/ms-excel");
   
   PrintWriter op = response.getWriter();  
   String CSV = request.getParameter("tableHTML");  
   if (CSV == null)  
   {  
       CSV="NO DATA";  
   }  
   if (fileName == null)  
{  
   CSV="NO FILE NAME SPECIFIED";  
}  
   op.write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>");
op.write(CSV);  
    }catch (Exception ex){
    ex.printStackTrace();
    }
%>  

2014年3月7日 星期五

開發之前,先確定客戶伺服器環境

I have learned this in a hard way...

開發之前,對方答應讓我們用我們的環境開發
所以我們用了當下比較新版的java1.7 tomcat7 mysql5.6
到最後客戶卻只能提供java 1.7, tomcat 6, mysql5.1
許多伺服器設定又不允許做更改
只能在CODE裡面做手腳去解決

It is a total disaster!!!

早點知道環境就不用安裝的這麼痛苦了,MLGB。