繁体   English   中英

H2表解析错误中DBUnit插入时间戳默认值

[英]DBUnit inserting Timestamp default value in H2 Table parsing error

当我尝试使用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)

这些值都不是必需的timestamp列的值,因此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(如上所述,这三个值不包括timestamp列)

<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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM