无法使用liquibase和h2数据库最新版本从CSV文件插入NULL值

问题描述 投票:0回答:1

我有一个外部csv文件,其中包含要插入的数据。我的一个列是数据类型timestamp(但它是一个可以为空的列)。将数据值设置为NULL / null将在以下异常中结束。

Caused by: liquibase.exception.DatabaseException: 
org.h2.jdbc.JdbcBatchUpdateException: Cannot parse "TIMESTAMP" constant ; SQL statement:

我调试了看生成的insert语句,看起来CommandInterface有空的“”字符串值,而不是在我进入JdbcPreparedStatement类时有NULL。

编辑:无意中,我尝试在liquibase脚本中设置列的数据类型(可以为NULL)并修复了问题。

h2 liquibase
1个回答
0
投票

在我的更改日志中明确添加了带有数据类型的这些列标记,并修复了该问题。似乎是一个liquibase问题,而不是H2 DB。

<loadData tableName="Order" file="test_data/Order.csv">
  <column name="CreatedAt" type="TIMESTAMP"/>
  <column name="UpdatedAt" type="TIMESTAMP"/>
  <column name="OrderAt" type="TIMESTAMP"/>
  <column name="BusinessDate" type="DATE"/>
  <column name="ClaimedAt" type="TIMESTAMP"/>
  <column name="SnapshotID" type="STRING"/>
</loadData>

注意:我的表有更多列。这些是可以接受空值的列。

我花了整整2天才找到这个。正如您所看到的那样是H2 DB异常。即使csv具有空值,Liquibase似乎默认为空字符串,除非您指定具有其数据类型的列。

© www.soinside.com 2019 - 2024. All rights reserved.