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

时间:2019-04-22 20:42:41

标签: h2 liquibase

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

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

我调试了一下生成的insert语句,当我进入JdbcPreparedStatement类时,似乎CommandInterface的字符串值为空,而不是NULL。

编辑:偶然地,我试图在我的liquibase脚本中设置列的数据类型(可以为NULL),并解决了该问题。

2 个答案:

答案 0 :(得分: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具有null值,Liquibase似乎默认为空字符串,除非您使用数据类型指定列。

答案 1 :(得分:0)

我使用的是Liquibase 3.5.5版,并且在我的csv中使用'NULL'对我有用

liquibase示例文件:

id,field1,field2,field3
11,NULL,NULL,test

将导致将NULL值分别插入到field1和field2中。