2013-06-29 193 views
0

我用java.util.Date來獲得日期和我得到的日期格式這樣SQL插入日期到數據庫

週六6月29日11時07分25秒CDT 2013

當我嘗試插入入使用

String QueryString = "INSERT INTO db (day) Values ('"+d+"');"; 
    st.executeUpdate(QueryString); 

我得到這個

數據庫

「從字符 字符串轉換日期和/或時間時轉換失敗。」

如何將該類型的日期插入到數據庫中?

我應該聲明它是一個字符串嗎?

+0

參數值。 –

回答

4

兼容我如何可以插入日期類型到數據庫?我應該把它聲明爲一個字符串嗎?

不 - 你應該避免連字符串轉換你目前有。您不應該像這樣動態構建您的SQL - 這是SQL注入攻擊,難以閱讀的代碼和轉換失敗的祕訣。

相反,使用PreparedStatement,並設置使用setDate參數:

// TODO: Closing the statement cleanly in a finally block or try-with-resources 
PreparedStatement pst = conn.prepareStatement("INSERT INTO db (day) Values (?)"); 
pst.setDate(1, new java.sql.Date(d.getTime())); 
pst.executeUpdate(); 

注意java.sql.Datejava.util.Date一個子類,但他們有些不同。我從來不清楚哪一個時區用於將給定時刻轉換爲真實日期 - 而且文檔不夠有用。在我看來,它被設計打破了,但這是另一回事。您可以使用另一個setDate超載,該超載接受Calendar - 用於時區。這仍然是可怕的不清楚,但希望你能得到你想要的結果。

0

另外,使用updatable ResultSet

ResultSet rs = conn.createStatement("select day from db", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); 
rs.moveToInsertRow(); 
rs.updateDate(1, yourJavaSqlDateObject); 
rs.insertRow(); 
rs.first(); 

雖然,這取決於你的驅動程序/數據庫上,有可能是在桌子上寫鎖。

日期格式應該在輸出上進行,而不是輸入。讓數據庫決定如何最好地存儲日期。

0

你可以使用SimpleDateFormat格式化你的日期對象

Date d = Calendar.getInstance().getTime(); //Your date 

String dateString = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d); 

String QueryString = "INSERT INTO db (day) Values ('"+dateString+"');"; 
st.executeUpdate(QueryString);