2011-02-10 29 views
3

我試圖做到這一點修正錯誤:如何將DATETIME時到數據庫

pr.setStartdate("2006-09-10T00:00:00"); 

我收到此錯誤:

java.sql.SQLDataException: The syntax of the string representation of a datetime value is incorrect. 

如何成功插入任何想法將是巨大的。

這裏有一些更多的代碼。 現在我需要setDate嗎?或者setString是否適用於begintime,endtime和date?他們都是DATETIME對象:

PreparedStatement pstmt = conn.prepareStatement("UPDATE Event SET date=?, begintime=?, endtime=?, status=?, productionid=?, conceptual_packageid=? WHERE id=?"); 
     pstmt.setString(1, pkg.getDate()); 
     pstmt.setString(2, pkg.getBeginTime()); 
     pstmt.setString(3, pkg.getEndTime()); 
     pstmt.setString(4, pkg.getStatus()); 
     pstmt.setString(5, pkg.getProductionID()); 
     pstmt.setString(6, pkg.getConceptual_PackageID()); 
     pstmt.setString(7, pkg.getId()); 

     pstmt.executeUpdate(); 
     pstmt.close(); 
+0

嘗試在單引號中傳遞日期參數。 – Rachel 2011-02-10 03:42:03

+0

我已經嘗試過,但是我得到錯誤行,說:「未封閉的字符字面,不是一個聲明,';'我很難過,這似乎很簡單 – novicePrgrmr 2011-02-10 03:44:40

+0

什麼是'公關'我不認爲這是一個準備好的聲明 – 2011-02-10 03:48:26

回答

6

我建議你使用PreparedStatement的setTimestamp(...)和setDate(...)方法,然後將實際的Date對象傳遞給它們,而不是使用字符串。如果僅限於在「公關」類處理字符串,則字符串轉換爲在derby doc指定的格式,然後用下面的代碼

java.sql.Timestamp.valueOf("time/date converted"); 
2

Dates, times, and timestamps cannot be mixed with one another in expressions. Derby supports the following formats for TIMESTAMP:

yyyy-mm-dd hh:mm:ss[.nnnnnn]
yyyy-mm-dd-hh.mm.ss[.nnnnnn]

The year must always have four digits. Months, days, and hours may have one or two digits. Minutes and seconds must have two digits. Nanoseconds, if present, may have between one and six digits.

所以,你應該用空格或連字符替換 'T'。

3

從我可以告訴,德比沒有「DATETIME」數據類型,它們支持DATE,TIME和TIMESTAMP。

http://db.apache.org/derby/docs/10.10/ref/crefsqlj31068.html

因此我會確保你聲明你「日期」欄爲TIMESTAMP,如果你想保持的時間和日期值在這一領域。

第二我會單引號的列名'日期',因爲日期是一個保​​留的數據類型。我不知道這是否會成爲問題,但可能想嘗試。

第三,當設置/獲取「日期」一欄,我會嘗試使用設置/ getTimestamp和合格/適用分配java.sql.Timestamp對象。

希望能提供一些幫助。

1

如果有人遇到這個長達幾個月的問題(正如我所做的那樣),請做相似但不相同的操作:仔細查看Lev Khomich的答案中的兩種格式:日間/小時與冒號之間有一個空格小時/分鐘,以及小時/分鐘之間的日/小時之間的短劃線。我剛剛有一個案例,使用一個SQL語句,時間在小時/分鐘之間,其中日/小時之間的空間導致了錯誤,但破折號卻沒有。

我習慣DB2,使用小時/分鐘和分鐘/秒之間的時間段時,使它更容易被忽視它接受可以是破折號或空格。我只是假設在日/小時之間允許空間或短跑。

相關問題