【问题标题】:DBUnit inserting Timestamp default value in H2 Table parsing errorDBUnit在H2表解析错误中插入时间戳默认值
【发布时间】:2014-11-28 14:16:30
【问题描述】:

当我尝试使用 DBUnit 将记录插入 H2 表时,我得到一个异常原因:

Caused by: org.h2.jdbc.JdbcSQLException: 
  Cannot parse "TIMESTAMP" constant "1970-00-01"; 
  SQL statement: insert into PUBLIC.TABLE (COLX, COLY, COLZ) values (?, ?, ?)
Caused by: java.lang.IllegalArgumentException: 
  1970-0-1 at org.h2.util.DateTimeUtils.parseDateValue(DateTimeUtils.java:276)

这些值都不适用于所需的时间戳列,因此 dbUnit 似乎试图插入一个引发问题的默认值。 注意:1970-0-1 不是表描述中的 1970-00-01(见下文)。

我不确定我可以在哪里配置行为。无论如何,她是我的一些设置,可以帮助识别错误:

创建语句:

create table MYTABLE (
    "UUID" binary default random_uuid() not null,
    "COL2" varchar(18) not null,
    "COL3" varchar(20),
    "COL4" timestamp default '1970-00-01',
    ...

DataSet XML(如前所述,三个值不包括时间戳列)

<dataset>
  <MYTABLE COLX="text" COLY="1" COLZ="Text"/>

我也设置了

dbConfig.setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new H2DataTypeFactory());

我在考虑两种可能性: 1. dbUnit 是否试图从列信息中解析值? 2. dbUnit 中是否有标准的默认时间戳/日期字段生成器?

那么我需要做什么才能插入正确的默认值?

【问题讨论】:

    标签: java hibernate timestamp h2 dbunit


    【解决方案1】:

    没有第0个月。1月是第1个月。所以你需要使用'1970-01-01'而不是'1970-00-01'

    【讨论】:

    • 我错过了所有树木的森林。我仍然想知道为什么当我通过自定义 xml 数据集手动插入错误的日期时它会起作用。
    • @MidgarZolom,是的,如果您使用了错误的格式字符串,它会给出 1970-00-01。
    猜你喜欢
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-21
    • 1970-01-01
    相关资源
    最近更新 更多