我有一个外部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),并解决了该问题。
答案 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中。