2009-09-01 32 views
28

字段定義無法將 '0000-00-00 00:00:00' 到TIMESTAMP

/** Date. */ 
    @Column(columnDefinition = "datetime") 
    private Date date; 

二傳手

public void setDate(final Date date) { 
    DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    try { 
     this.date = dfmt.parse(dfmt.format(date)); 
    } catch (ParseException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    } 

任何人都不會有想法如何轉化 「零日」 到適當的價值? 因爲我有錯誤:

Cannot convert value '0000-00-00 00:00:00' from column 13 to TIMESTAMP 

即使我這樣設置 「默認」 字段和setter:

/** Date. */ 
     @Column 
     private Date date; 


public void setDate(final Date date) { 
     this.date = date; 
    } 

我仍然有同樣的問題....

+2

在我看來,0000-00-00 00:00:00不符合任何實際時刻,因此它從根本上不能轉換爲時間戳值。你想要的行爲是什麼?你是否希望它將無效的ISO日期轉換爲默認值? – 2009-09-01 16:53:18

+0

我從表中獲取數據(表中不止有一列)後的下一步行動是將此代碼寫入XML,但(!)我不會將日期值寫入XML,因此我只想從表中獲取數據,之後,我將永遠不會調用getDate()方法。 – Oleksandr 2009-09-01 16:58:56

+0

「您是否希望它將無效的ISO日期轉換爲默認值?」 - 是的,如果有可能... – Oleksandr 2009-09-01 17:00:29

回答

63

我想在這裏猜測你使用的是MySQL :-)它使用「零日期」作爲special placeholder - 不幸的是,JDBC默認情況下無法處理它們。

解決的辦法是指定「zeroDateTimeBehavior = convertToNull」作爲參數傳遞給你的MySQL連接(無論是在數據源URL或作爲附加特性),例如:

jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull 

這將導致所有這樣的值將被檢索作爲NULL。

+1

+1。有同樣的問題。找到相同的答案。 – 2009-09-01 17:58:53

+0

只是一個側面說明 - 這將在讀取期間將零日期轉換爲空值,但在保存期間不會將零值轉換爲零。我還沒有找到一種方法通過休眠來將「0000-00-00」保存到數據庫中。 – serg 2009-09-01 20:04:07

+0

@serg555 - 你是對的。但是,我必須問 - 爲什麼要將「0000-00-00」保存到數據庫中?正是由於這個原因存在NULL,這整個「0000-00-00」可憎只不過是痛苦。 – ChssPly76 2009-09-01 21:09:03

3

我不明白你的代碼中的點,然後你格式化,然後再解析一個日期。這似乎是一個相同的操作。也許你可以詳細說明一下?


如果你想給一個默認值的日期,你可以這樣做:

/** Jan 1, 1970 ; first moment in time in Java */ 
private static final Date NO_DATE = new Date(0L); 

private Date date; 

public void setDate(final Date date) { 
    if (date == null) { 
     this.date = NO_DATE; 
    } else { 
     this.date = date; 
    } 
} 

注:標註是optionnal,在這裏我沒有添加。

在此代碼中,您可以將所需條件替換爲默認值。

你也可以添加一個類似的setter,它將接受一個String參數,並檢查你的特殊「00000 ...」值。這將允許使用日期或字符串來設置字段。

相關問題