症狀:
mysq查詢報錯:java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Timestamp
情景:
自己建了個表,寫入了一些數據,然后查詢的時候(select * from XXX limit 1)失敗了,這么一條數據查詢都失敗,就蒙了。。
經過查詢,問題也逐漸明朗:
在java應用程序中,數據表中有記錄的time字段(屬性為timestamp)其值為:“0000-00-00 00:00:00”
程序使用select 語句從中取數據時出現以下異常:java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date
這是因為 “0000-00-00 00:00:00”在mysql中是作為一個特殊值存在的,但是在Java中, java.sql.Date 會被視為 不合法的值,被JVM認為格式不正確。
解決方法:
在jdbc的url加上 zeroDateTimeBehavior參數: datasource.url=jdbc:mysql://localhost:3306/pe?useUnicode=true&characterEncoding=gbk&zeroDateTimeBehavior=convertToNull
加上這個的目的是,告訴java,當你讀取到一串0的日期時,不要報錯(默認是報錯),返回給我一個空就行。
此外這個字段還有另一個值:zeroDateTimeBehavior=round 這個的意思是返回最近的一個時間如:0001-01-01 00:00:00.0,感覺沒啥用
總結:
解決方法,修改數據庫連接串,添加zeroDateTimeBehavior=convertToNull
另外,這個問題可以在寫入數據的時候就可以避免,所以在寫入時要謹慎些。
參考:
https://blog.csdn.net/lp_cq242/article/details/80713197