当前位置: 首页 > 知识库问答 >
问题:

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

杭永安
2023-03-14

我有一个外部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个答案

司空凌
2023-03-14

在我的变更日志中显式添加了这些数据类型为的列标记,解决了这个问题。似乎是一个液化问题,而不是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>

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

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

从景曜
2023-03-14

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

示例liquibase文件

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

将导致NULL值分别插入字段1和字段2。

 类似资料:
  • 我试图用CSV文件中的值填充H2数据库,如下所示: 这也是我的实体类: 这是我的CSV文件: 当我调用endpointlocalhost:8082/loadController时,我的数据库没有被填充,而是保持为空,我得到的只是控制台中的以下错误: 最后,我的问题是我应该做什么,我应该怎样做才能把事情做好?

  • 我正在inMemory数据库中插入数据,当插入数据时,我得到了一个问题, 使用boot、JPA、H2db在内存中插入数据的示例程序 > 创建Pojo并使用JPA注释进行注释 > 配置在app.prop:中 在data.sql文件中添加了给定表 为data.sql中提到的转换添加了名称。 在哪里配置;在Springboot中? 波乔 控制器 错误原因:对名为'in memorydatabaseShu

  • 我是maven的新手,我已经用pom文件编写了自己的maven插件 然后,在我的IDE(intellij)中,我使用clean install安装maven插件 扎克

  • 问题内容: 我正在尝试使用H2的runscript运行sql脚本。 该表之一包含一个长文本类型,该类型存储了一个xml文档(来自SAP数据库) 因此,Insert语句包含XML的长文本(大约200行XML),虽然很难看,但仍然可以使用。 在SQL解析期间,H2因ArrayOutOfBoundException而崩溃。 插入语句接受的长度是否有限制? 在nsert中,我使用刻度(如mysql中所使用

  • 问题内容: 我有一些要导入mySQL的CSV数据文件。我想在shell脚本中进行插入,以便可以将其自动化。但是,我对在脚本中使用明文形式输入用户名和密码感到有些厌倦 我有以下问题: 我对脚本中明文中的uname / pwd的想法感到不满意(反正还是这样,还是我太偏执)?也许我可以为插入表设置仅具有INSERT特权的用户? 数据库表(导入原始数据的数据库表)具有基于表列的唯一键。我尝试导入的数据中也