H2:生成插入脚本初始化脚本

时间:2016-12-12 13:51:50

标签: java spring integration-testing h2 spring-test

我有完整的h2数据库,其中包含大量数据。我想再次启动集成测试数据。

问题1: 是否可以从完整的h2数据库生成* .sql插入文件/脚本?

我按照here描述了SCRIPT TO 'fileName'。但它只生成CREATE/ALTER TABLE/CONSTRAINT个查询,意味着创建没有数据的模式。

如果回答第一个问题是“不可能”,那么:

问题2: * .sql插入文件是将初始数据集插入h2 db进行集成测试的唯一方法吗?

1 个答案:

答案 0 :(得分:4)

  

问题1:是否可以从中生成* .sql插入文件/脚本   完整的h2数据库?

我刚刚测试了一个H2文件数据库,因此导出导出了结构和数据 我测试了H2的1.4.193版本。

出口工作的两种方式:

  • 来自H2控制台的SCRIPT命令
  • 来自命令行的
  • org.h2.tools.Script工具。

1)我首先测试了org.h2.tools.Script工具,因为我已经使用过它。

以下是导出结构和数据的最小命令:

java -cp <whereFoundYourH2Jar> org.h2.tools.Script -url <url> 
     -user <user> -password <password>

其中:

  • <whereFoundYourH2Jar>是你有h2.jar lib的类路径(我使用的那个是我的m2 repo)。
  • <url>是您数据库的网址
  • <user>是数据库的用户
  • <password>数据库的密码

您在org.h2.tools.Script工具的官方帮助中有更多详细信息:

Creates a SQL script file by extracting the schema and data of a database.
Usage: java org.h2.tools.Script <options>
Options are case sensitive. Supported options are:
[-help] or [-?]    Print the list of options
[-url "<url>"]     The database URL (jdbc:...)
[-user <user>]     The user name (default: sa)
[-password <pwd>]  The password
[-script <file>]   The target script file name (default: backup.sql)
[-options ...]     A list of options (only for embedded H2, see SCRIPT)
[-quiet]           Do not print progress information
See also http://h2database.com/javadoc/org/h2/tools/Script.html

2)我已经使用H2控制台的SCRIPT命令进行了测试。它也有效。

然而,SCRIPT命令的结果可能会产生误导。
查看官方文档:

  

如果没有&#39; TO fileName&#39;指定子句,脚本作为返回   结果集。此命令可用于创建备份   数据库。对于长期存储,它比复制更容易携带   数据库文件。

     

如果&#39; TO fileName&#39;指定子句,然后是整个脚本   (包括插入语句)写入此文件,结果   没有插入语句的set被返回。

您已使用SCRIPT TO 'fileName'命令。在这种情况下,整个脚本 (包括插入语句)写入此文件,因此在H2控制台中,除了insert语句之外,您将拥有所有内容 例如,输入SCRIPT TO 'D:\yourBackup.sql'命令(如果使用它,则输入Unix友好目录),然后打开文件,您将看到存在SQL插入。

如文档中所述,如果要在H2控制台的输出结果中同时获取结构和插入语句,请不要指定TO参数。 只需输入:SCRIPT

  

问题2:* .sql是否插入文件是插入初始化的唯一方法   数据集进入h2 db进行集成测试?

经过长时间讨论:)您可以使用DBunit数据集(其他解决方案)。