在Java中對mysql資料庫插入datetime型別資料
阿新 • • 發佈:2019-02-02
最近在做一個簡單的考勤系統的時候碰到了一個弄了我好久的問題,在我往資料庫中更新一條簽到時間的記錄的時候,我獲取的時間是沒有錯的,但是Hibernate往資料庫裡面插入的時候資料的時候,控制檯報了一大堆錯誤,而資料庫裡面也是沒有任何資料被更新的。。這就引發了異常Debug~~
我資料庫裡面定義的欄位是這樣的:
欄位名 :punch_time
欄位型別:datetime
然後我往資料庫插入的資料是這樣的
Date date=new Date(); //獲取一個Date物件
DateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" ); //建立一個格式化日期物件
String punchTime = simpleDateFormat.format(date); //格式化後的時間
這個時間得到的時間物件確實是 “yyyy-MM-dd HH:mm:ss
“,也就是我們常見的例如”2016-12-20 15:00:00
“樣的日期物件,然後我覺得程式執行下去沒有事,然後控制檯就開始報錯了,因為在實體類中設定欄位punch_time
是使用的java.util.Date
型別,然後我傳過去自然就是錯誤的。然後我決定不用格式化後的時間去,我直接傳一個new Date()
物件進去,結果是肯定的,直接拋異常。
在Mysql資料庫中日期跟時間的我知道有兩種,一種是date
datetime
型別,date
型別也就是我們常見的儲存yyyy-MM-dd
型別的日期,它不能儲存時間,也就是隻能儲存日期,另外一種dateitme
自然就是又可以儲存日期同時也可以儲存時間,不過是連在一起的,也就是我需要的目標型別。查詢Mysql手冊中連線 datetime
可以儲存1000-01-01
到 9999-12-31
的日期,
這個時候我又想起以前在寫JDBC程式碼的時候好像也碰過這個問題,也是在定義實體類物件的時候也是被 java.util.Date
物件跟 java.sql.Date
物件搞混了,無奈只好去谷歌上搜索下怎麼樣處理比較好,但是搜出來的都是比較的中國化結果,大部分都是你抄我的我抄你的,往下翻,在CSDN上博主名為dongdong9223
java.util.Date date = new java.util.Date(); // 獲取一個Date物件
Timestamp timeStamp = new Timestamp(date.getTime()); // 講日期時間轉換為資料庫中的timestamp型別
使用這兩行程式碼轉換時間後,我們就可以往資料庫插入”yyyy-MM-dd HH:mm:ss
“型別,通過Intellij IDEA檢視繼承關係,我們可以發現Timestamp
物件也是繼承了Date
類