当我尝试使用 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 中是否有标准的默认时间戳/日期字段生成器?
那么我需要做什么才能获得正确的默认值将被插入?
最佳答案
没有月份 0。一月是月份 1。因此您需要使用 '1970-01-01'
而不是 '1970-00-01'
。
关于java - DBUnit 在 H2 表中插入时间戳默认值解析错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27190580/