JAVA操作MySQL tImestamp列值為0時丟擲異常的處理~

junsansi發表於2011-05-17

JAVA連線MySQL資料庫,在操作值為0timestamp型別時不能正確的處理,而是預設丟擲一個異常,就是所見的:java.sql.SQLException: Cannot convert value '0000-00-00 00:00:00' from column 7 to TIMESTAMP。這一問題在官方文件中有詳細說明,詳見如下連結:

http://bugs.mysql.com/bug.php?id=19274

http://dev.mysql.com/doc/refman/5.5/en/connector-j-installing-upgrading.html

JDBC連線串中有一項屬性:zeroDateTimeBehavior,可以用來配置出現這種情況時的處理策略,該屬性有下列三個屬性值:

exception:預設值,即丟擲SQL state [S1009]. Cannot convert value....的異常;

convertToNull:將日期轉換成NULL值;

round:替換成最近的日期即0001-01-01

因此對於這類異常,可以考慮通過修改連線串,附加zeroDateTimeBehavior=convertToNull屬性的方式予以規避,例如:

jdbc:mysql://localhost:3306/mydbname?zeroDateTimeBehavior=convertToNull

 

  從另一個層面講,這類異常的觸發也與timestamp賦值的操作有關,如果能夠在設計階段和記錄寫入階段做好邏輯判斷,避免寫入'0000-00-00 00:00:00'這類值,那麼也可以避免出現Cannot convert value '0000-00-00 00:00:00' from column N to TIMESTAMP的錯誤。

  關於MySQL timestamp型別的說明,可以參考: MySQL資料庫中的timestamp型別與時區

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7607759/viewspace-695531/,如需轉載,請註明出處,否則將追究法律責任。

相關文章