今天在執行某個分頁查詢時,查詢MySQL的結果集時遇到如下報錯:
java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
查詢資料后記錄下出錯原因:
查詢的結果集中某數據行的日期值為0000-00-00 00:00:00。
因MySQL的時間類型datetime范圍是1000-01-01 00:00:00 到 9999-12-31 23:59:59,所以報錯。
如何解決:
可以考慮通過修改連接串,附加zeroDateTimeBehavior=convertToNull屬性的方式予以規避,例如:
- jdbc:mysql://localhost:3306/mydbname?zeroDateTimeBehavior=convertToNull
在JDBC連接串中有一項屬性:zeroDateTimeBehavior,可以用來配置出現這種情況時的處理策略,該屬性有下列三個屬性值:
- exception:默認值,即拋出SQL state [S1009]. Cannot convert value....的異常;
- convertToNull:將日期轉換成NULL值;
- round:替換成最近的日期即0001-01-01;
從另一個層面講,這類異常的觸發也與timestamp賦值的操作有關,如果能夠在設計階段和記錄寫入階段做好邏輯判斷,避免寫入 '0000-00-00 00:00:00'這類值,那么也可以避免出現 Cannot convert value '0000-00-00 00:00:00' from column N to TIMESTAMP的錯誤。