如何在一个 EmbeddedDatabaseBuilder 中组合多个具有不同分隔符的 SQL 文件?

Posted

技术标签:

【中文标题】如何在一个 EmbeddedDatabaseBuilder 中组合多个具有不同分隔符的 SQL 文件?【英文标题】:How to combine multiple SQL files with different separators in one EmbeddedDatabaseBuilder? 【发布时间】:2017-07-05 17:24:46 【问题描述】:

我需要设置一个嵌入式数据库才能在 Spring Boot 项目中运行我的测试用例。

我已将我的 SQL 脚本分成两个文件,以便为它们设置不同的分隔符:

一个包含我的基本创建表脚本 (NAME = create-table.sql, SEPARATOR = ;),另一个包含存储过程 (NAME = stored-procedures.sql, ,分隔符 = /;)。

根据this post 上的 cmets,我可以通过在 applicationContext.xml 中执行此操作为两个 sql 文件配置不同的分隔符:

<jdbc:initialize-database data-source="mctDBDataSource" ignore-failures="DROPS" >    
  <jdbc:script location="classpath:databaseTesting/inMemory/createInMemoryDatabase.sql" separator=";"/>
  <jdbc:script location="classpath:databaseTesting/inMemory/createInMemoryDatabaseProcedures.sql" separator="/;"/>
</jdbc:initialize-database>

但就我而言,我正在尝试使用如下的非 XML 方法。

public DataSource myDataSource()
   return new EmbeddedDatabaseBuilder().generateUniqueName(true)
   .setType(EmbeddedDatabaseType.HSQL).addScript("create-table").setSeparator(";").setEncryptEncoding("UTF-8")
   .ignoreFiledDrops(true).build();

如果我只使用一个 SQL 文件,上面的代码可以正常工作。

如何将两个不同分隔符的 SQL 文件组合成一个 DataSource。

这样做是行不通的:

public DataSource myDataSource()
  return new EmbeddedDatabaseBuilder().generateUniqueName(true)
  .setType(EmbeddedDatabaseType.HSQL).addScript("create-table")
  .setSeparator(";").addScript("stored-procedures").setSeparator("/;")setEncryptEncoding("UTF-8")
  .ignoreFiledDrops(true).build();

【问题讨论】:

【参考方案1】:

您不能直接使用EmbeddedDatabaseFactor 执行此操作,但您可以使用EmbeddedDatabaseFactor 中的一个脚本,然后使用新的ResourceDatabasePopulator 在数据库上执行第二个脚本。

【讨论】:

以上是关于如何在一个 EmbeddedDatabaseBuilder 中组合多个具有不同分隔符的 SQL 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PickerView 顶部添加一个按钮以及如何在单击该按钮时关闭 PickerView?

如何显示一个引导范围以及如何在输入字段中显示值?

iOS:如何在另一个表格视图中显示搜索结果?以及如何在搜索时显示建议?

如何在存储过程中创建字符串列表变量以及如何在另一个查询中使用它?

如何在裸机下设计一个嵌入式系统架构?

MATLAB中如何建立一个Mat文件