在h2数据库中执行脚本文件

73

首先,我想说我对H2数据库比较陌生。我需要在H2数据库中执行一个SQL脚本文件。我有一个名为test.sql的脚本文件,并且希望在H2数据库中执行它。这是可能的吗?

4个回答

111
你可以使用RUNSCRIPT SQL语句
RUNSCRIPT FROM 'test.sql'

或者你可以使用RunScript独立/命令行工具

java -cp h2*.jar org.h2.tools.RunScript -url jdbc:h2:~/test -script test.sql

您也可以在应用程序中使用RunScript工具:

RunScript.execute(conn, new FileReader("test.sql"));

2
你的第一个示例有什么技巧吗?我有一个名为bootstrap.sql的文件,里面什么都没有,只有RUNSCRIPT FROM 'test.sql',而我的test.sql与引导文件位于同一目录下。如果我运行jdbc:h2:mem:etsnom;INIT=RUNSCRIPT FROM 'C:/workspace/bootstrap.sql',我会得到一个FileNotFoundException错误。 - Snekse
2
如果我们使用Thomas的第二种方法来创建数据库,那么默认的用户名和密码将被设置为空字符串"",这是在"RunScript"类中实现的。然而,在访问数据库时设置用户名和密码总是非常重要的,在H2数据库中,我们可以运行以下命令来设置:java -cp h2*.jar org.h2.tools.RunScript -url jdbc:h2:~/test -user sa -password sa -script test.sql - School Boy

19
如果您正在使用spring-boot和spring-test与H2,则它将自动在类路径中查找schema.sqldata.sql,并尝试运行这些脚本。因此,如果您将它们放在src/test/resources中,它们应该会被自动识别并运行。
另外,您可以使用属性指定要运行的数据文件。例如,在您的application.properties中添加一个属性,如下所示:
spring.datasource.data=classpath:users.sql, classpath:books.sql, classpath:reviews.sql

将配置Spring运行这三个 SQL 文件,而不是运行 data.sql


12

在OSX上(这其实并不重要),使用版本为1.4.192的以下命令,无论我怎么做都看不到任何结果:

java -cp h2*.jar org.h2.tools.RunScript -url "jdbc:h2:file:~/testdb" -user someusername -password somepass -script select.sql

select.sql 仅包含:

select * from PUBLIC.MYTABLE;

在输出开始出现之前,我必须添加-showResults。以下是完整的命令:

我需要在-showResults之前加上它,才能看到输出结果。以下是完整的命令:

(Two possible translations depending on the context.)
java -cp /Users/az/.m2/repository/com/h2database/h2/1.4.192/h2-1.4.192.jar org.h2.tools.RunScript -url "jdbc:h2:file:~/testdb" -user someusername -password somepass -script select.sql -showResults
如果你没有所需的jar包,请从此处下载(单击每个版本旁边的jar链接)。一些直接到jar包的链接如下所示:

1.4.193 (更新于2016年10月31日)

1.4.192 (更新于2016年5月26日)

1.4.191 (更新于2016年1月21日)

1.4.190 (更新于2016年10月11日)


1
谢谢提示!使用 java -cp h2*.jar org.h2.tools.RunScript -? 显示可用选项。然而,我还没有找到更详细解释这些选项的文档。例如,选项 [-checkResults] Check if the query results match the expected results 听起来很有趣,但我找不到如何提供预期结果的说明。 - not2savvy

2

对我来说,系统的响应是:

找不到org.h2.tools.RunScript驱动程序

解决方案是:

java -classpath <path_to_your_h2-*.jar> org.h2.tools.RunScript \
-url jdbc:h2:tcp://localhost/~/test -script test.sql

请查看: http://www.h2database.com/html/tutorial.html#using_server

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接