Archive

文章標籤 ‘jdbc’

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: , ,