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

VB_*_*VB_ 5 java spring integration-testing h2 spring-test

我有完整的 h2 数据库,里面有很多数据。我想针对该数据启动集成测试。

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

我已经尝试SCRIPT TO 'fileName'这里描述的。但它只生成CREATE/ALTER TABLE/CONSTRAINT查询,意味着创建没有数据的模式。

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

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

dav*_*xxx 6

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

我刚刚用我的 H2 文件数据库之一进行了测试,结果导出导出结构和数据。
我用1.4.193H2的版本测试过。

导出工作的两种方式:

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

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

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

java -cp <whereFoundYourH2Jar> org.h2.tools.Script -url <url> 
     -user <user> -password <password>
Run Code Online (Sandbox Code Playgroud)

在哪里 :

  • <whereFoundYourH2Jar> 是您拥有 h2.jar 库的类路径(我使用的是我的 m2 存储库)。
  • <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
Run Code Online (Sandbox Code Playgroud)

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

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

如果未指定“TO fileName”子句,则脚本作为结果集返回。此命令可用于创建数据库的备份。对于长期存储,它比复制数据库文件更便携。

如果指定了“TO fileName”子句,则将整个脚本(包括插入语句)写入此文件,并返回不带插入语句的结果集。

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

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

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

讨论了很长时间:) 您可以使用 DBunit 数据集(一种解决方案)。