当我尝试使用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 :(得分:2)
没有月份0. 1月份是1月1.因此您需要使用'1970-01-01'
代替'1970-00-01'
。