2012-03-12 112 views
0

使用數據庫相對較新,出於某種原因,我無法獲得此「執行」的功能。數據庫查詢問題

statment2.execute("insert into table Value (" + int + "," + date + "," + int + ",'" + string + "')"); 

我得到的錯誤是「缺少逗號」。日期僅在該特定字段中指定爲日期。

我將它設置如下

Date date = new Date(); 
date.setMonth(month); 
date.setYear(year); 
date.setDate(weekStart); //weekStart is always monday 

我需要只使用普通的舊日期或date.toString?我打算使用日曆,但我不知道如何使用日曆對象設置數據庫日期。我沒有看到「gety/m/d」方法。

那麼,問題是我的查詢還是我不正確地使用Date對象來設置數據庫中的日期?

編輯:

試過響應,得到了不正確的格式 - 預產期了號碼。 試過

sqlDate.valueOf(dateString I created) 
sqlDate.toString() 
sqlDate 

使用preparedStatement不會解決這個問題嗎?我意識到這應該是更好的安全原因。

+3

幾件事 - 1)取決於數據庫,每個數據庫將處理這不同。查看他們的文檔。 2)您應該研究JDBC準備語句,而不是隨時創建自己的SQL - 最終避免出現這些類型的問題。 – 2012-03-12 18:51:01

回答

2

首先,您應該使用PreparedStatement在查詢中插入值。這有很多優點,包括避免SQL Injection問題。如果你使用PreparedStatement,你將避免你現在看到的錯誤。您使用PreparedStatement的代碼會是這樣的:

Connection conn = null; 
    PreparedStatement pstmt = null; 
    try { 
     conn = getConnection(); 
     String query = "insert into table (column1,column2,column3,column4) values(?, ?, ?,?)"; 

     pstmt = conn.prepareStatement(query); 
     pstmt.setInt(1, 1); 
     pstmt.setDate(2, sqlDate); 
     pstmt.setInt(3, 3); 
     pstmt.setString(3, "test"); 
     pstmt.executeUpdate(); 
    } catch (Exception e) { 
     //log the error messages log.error(e,e); 
     //throw the actual exception upstream 
    } finally { 
     pstmt.close(); 
     conn.close(); 
    } 

我不確定您的意思是「DB」日期。如果您是SQL的Date對象之後,你可以這樣一個java.util.Date對象轉換爲java.sql.Date對象:

java.util.Date date = new java.util.Date(); 
java.sql.Date sqlDate = new java.sql.Date(date.getTime()); 
+0

嗯,得到不正確的格式預期日期得到數字。 – cphilpot 2012-03-12 19:03:05

+0

我是否應該將字符串查詢=「準確地插入到表(column1,column2,column3,column4)值(?,?,?,?)中或將column1替換爲它的字面名?對於混淆,抱歉。 (即將開始) – cphilpot 2012-03-12 19:09:54

+0

@cphilpot - 用實際名稱替換column1它不是PreparedStatement的一部分標準SQL – CoolBeans 2012-03-12 19:11:50