使用PreparedStatement插入Date類型踩坑

一般Java代碼中使用的Date都是java.util.Date;而原生jdbc中的PreparedStatement類型的setDate() 方法要求 java.sql.Date;所以開發工具會提示你要做類型轉換,不知道有坑的人多半跟我一樣直接點擊工具提示進行解決,就變成了這樣   

ps.setDate(15,(java.sql.Date)createTime);

錯誤發生回頭調試的時候才發現時間轉換這裏是有問題的,正確做法如下:

ps.setDate(15,new java.sql.Date(createTime.getTime()));

說一下爲啥會出現這種情況,由於java.sql.Date是繼承於java.util.Date的,子類轉父類是不允許的,而java.sql.Date的構造函數只提供了參數爲long的,所以還要把createTime轉成long,而Java也提供了getTime()方法用於轉換,所以就變成了下面正確的做法。即使如此,由於java.sql.Date是不包含時分秒的也會造成時分秒數據的丟失。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章