【问题标题】:Not able to insert NULL values from CSV file with liquibase and h2 database latest version无法使用 liquibase 和 h2 数据库最新版本从 CSV 文件中插入 NULL 值
【发布时间】:2019-09-12 00:41:00
【问题描述】:

我有一个外部 csv 文件,其中包含要插入的数据。我的一列是数据类型时间戳(但它是一个可为空的列)。数据值为 NULL/null 会导致以下异常。

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

我调试查看生成的插入语句,当我进入 JdbcPreparedStatement 类时,CommandInterface 似乎有空的“”字符串值而不是 NULL。

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

【问题讨论】:

    标签: h2 liquibase


    【解决方案1】:

    在我的变更日志中明确添加了这些带有数据类型的列标记,从而解决了问题。似乎是一个 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 似乎默认为空字符串,除非您使用其数据类型指定列。

    【讨论】:

    • 解决我的问题,有没有更简单的方法
    【解决方案2】:

    我使用的是 liquibase 3.5.5 版,在我的 csv 中使用“NULL”对我有用

    示例 liquibase 文件:

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

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

    【讨论】:

    • 如果升级到3.6.3版本会出现问题
    • 刚刚在 3.10.0 中使用过它并且有效!谢谢 ;) (我定义了数据列,就像在接受的答案中所说的那样)
    猜你喜欢
    • 2022-01-24
    • 2021-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多