Archive

‘JAVA’ 分類過的Archive

使用 Hibernate Tools Reverse-Engineering 在SQL Server上

2008年7月31日 尚無評論

最近開始學習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 如下,設定了 下面這個參數就可以成功產生出來

<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE hibernate-reverse-engineering
  SYSTEM “
http://hibernate.sourceforge.net/hibernate-reverse-engineering-3.0.dtd” >

<hibernate-reverse-engineering>
<schema-selection match-schema=”dbo”/>
</hibernate-reverse-engineering>

因為在try 所以權限是db owner , 我想大概大多人使用的帳號都是db owner吧!!

Categories: JAVA Tags: ,

Struts 中文問題排除

2008年7月24日 尚無評論

 目前除了一個一個參數轉碼外,想要省功夫的作法有以下二種

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 即可解決中文問題

Categories: JAVA Tags:

Java 透過JDBC 連Mysql 的Date 型態出現 Value '0000-00-00' can not be represented as java.sql.Date 解法

2008年7月22日 尚無評論

最近在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

Categories: JAVA Tags: , ,

檔案 md5 check 驗證

2008年7月18日 尚無評論

在網路上如何確認你下載的檔案是原作者的版本
或是在傳輸的過程中沒有遺失封包或被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好像與網路上有提供的好像有差異
暫時先不去深入瞭解
反正功用達到就好~^^

Categories: JAVA Tags:

QuickREx plugin for eclipse (Regular Expressions)

2008年5月28日 尚無評論

先前在check Regular Expressions時,同事有介紹可以使用QuickREx
還不錯用,所以特別介紹一下!!

相關資訊的連結在此..

more..

Categories: JAVA Tags: , ,
分頁: 上一頁 1 2 3 4 5 6 7 下一頁