最近開始學習Hibernate ,因為開發的模式都是先規劃資料庫 所以希望能從資料庫中的Schema轉成Hibernate 的VO
找了一下工具,在Hibernate官網的Hibernate Tools 看來是最合用的
下載安裝後,在測試期使用Mysql 都一切正常,不過轉換到MSSQL 時發生了 以下的問題
org.hibernate.cfg.JDBCBinderException: Duplicate class name CheckConstraints' generated for 'org.hibernate.mapping.Table(db.sys.check_constraints)'. Same name where generated for 'org.hibernate.mapping.Table(db.sys.check_constraints)'
看來是因為MSSQL 資料庫都會內含一些SYS(系統用)的schema,上網找了一下
在官網上有說明 可以有參數檔控制要反向的資訊,詳細如下 :
http://www.hibernate.org/hib_docs/tools/reference/en/html/reverseengineering.html
範例中是oracle ,看來oracle 及sqlserver 都要有額外的參數檔
目前先建了hibernate.reveng.xml 如下,設定了 下面這個參數就可以成功產生出來
因為在try 所以權限是db owner , 我想大概大多人使用的帳號都是db owner吧!!
目前除了一個一個參數轉碼外,想要省功夫的作法有以下二種
1.實作一個servlet filter攔截Action 並設定request.setCharacterEncoding(“big5”); 這樣所有進來都會先調整編碼
2.實作一個Struts的controller 在其中調整語系編碼即可,以下在JavaWorld的文章有不錯的範例程式可參考
http://www.javaworld.com.tw/jute/post/view?bid=11&id=35142&tpg=1&ppg=1&sty=1&age=0#35142
不過如果案子一多,不同語系在處理上就很麻煩,所以小弟再調整了一下將charset參數抽出來放到web.xml裡
從web.xml就可以設定語系參數為何,這樣就可以依照案子的需要調整語系
以下是程式的調整,為了取得web.xml 的參數值,所以使用了ServletContext ,因為在實作的controller只有 request
所以從request 取出的session就可以再叫出servletContext了,用法如下:
charset=request.getSession().getServletContext().getInitParameter(“charset”);
而在web.xml就要設定
<context-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</context-param>
再來就是在struts-config.xml之中,設定好使用剛實作出來的controller 即可解決中文問題
最近在try 時發現Date 型態如果default not null 那存入default value 會為'0000-00-00'
但在JAVA 透過JDBC取得data 時會出現以下錯誤訊息
Caused by: java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
我想問題是出現因為 java.sql.Date: since January 1, 1970 00:00:00.000 GMT 所以無法解析轉換吧!!
找了一下解法,在http://twpug.net/docs/mysql-5.1/connectors.html 這篇文章有提到
具有全0組分的Datetimes(0000-00-00 …):在Java中,無法可靠地資料表示這些值。從結果集讀取它們時,Connector/J 3.0.x總是會將其轉換為NULL。
預設情況下,遇到這類值時,Connector/J 3.1將拋出異常,這是因為,根據JDBC和SQL標準,這是最正確的行為方式。可以使用「zeroDateTimeBehavior」配置屬性改變該行為。允許的值包括:「exception」,(預設值),用代碼為「S1009」的SQLState拋出SQLException;「convertToNull」,返回NULL而不是數據;以及「round」,對日期進行捨入處理,使之成為最接近的值,即「0001-01-01」。
從Connector/J 3.1.7開始,能夠使用「noDatetimeStringSync=true」(預設值為「假」),將ResultSet.getString()與該行為分離開,從而能夠以字串的形式提取未被改變的全0值。請注意,這也會阻止使用任何時區轉換功能,因此,驅動程式將禁止同時啟用noDatetimeStringSync和useTimezone。
所以在連線參數加上zeroDateTimeBehavior=convertToNull&noDatetimeStringSync=true就可以排除啦!!
參考資料來源:http://twpug.net/docs/mysql-5.1/connectors.html
在網路上如何確認你下載的檔案是原作者的版本
或是在傳輸的過程中沒有遺失封包或被hacker從中加入什麼
所以可以用檢驗碼的方式來確認
目前最常在網路上被使用的就是MD5的檔案驗證機制,因為MD5加密後只要不同的data就會產生不同的驗證碼及不可逆的特性 不過近來已經有人稱可破解及找到碰撞可能,雖然出現了小瑕疵,不過因為使用方便及安全性還是足夠(破解可能性還是不普及)所以還是可以使用
以下是MD5的說明:
http://zh.wikipedia.org/wiki/MD5
http://a-010.cyut.edu.tw/~vote/md5.php
以下是Java的程式碼,傳入檔案進行MD5的驗證
File file = new File(“d:/1.dat”);
FileInputStream fs = new FileInputStream(file);
BufferedInputStream bi = new BufferedInputStream(fs);
ByteArrayOutputStream bo = new ByteArrayOutputStream();
byte[] b = new byte[bi.available()];
int i;
while ((i = bi.read(b, 0, b.length)) != -1)
{
bo.write(b, 0, i);
}
bo.close();
System.out.print(Md5.MD5(new String(bo.toByteArray())));
public final static String MD5(String s)
{
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
try
{
byte[] strTemp = s.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance(“MD5”);
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++)
{
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
catch (Exception e)
{
return null;
}
}
程式來源:
http://www.j2megame.org/index.php/content/view/749/125.html
原作者的程式產出的MD5好像與網路上有提供的好像有差異
暫時先不去深入瞭解
反正功用達到就好~^^
先前在check Regular Expressions時,同事有介紹可以使用QuickREx
還不錯用,所以特別介紹一下!!
相關資訊的連結在此..
more..
http://www.bastian-bergerhoff.com/eclipse/features/web/QuickREx/toc.html
要使用,就要到eclipse 的 Help > Software Updates > Find and Install.
然後按下New Remote Site 新的要安裝的URL 設定 http://www.bastian-bergerhoff.com/eclipse/features.
這樣就可以啦,接下來就一直按下一步即可
安裝完後會要你再重新啟動eclipse
再來就到Window->show view->other 裡面就可以找到QuickREx(如下圖) ,點選後就可以在作業視窗看到啦!!
再來就可以試用看看囉 !!
在test-text 裡輸入要檢測的文章,上方就可以寫上Regular Expression,他會將答合條件的highlight起來!!
近期留言