2009-09-01 29 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 ...”值。这将允许使用日期或字符串来设置字段。

相关问题