【发布时间】:2012-05-27 09:27:05
【问题描述】:
首先我想说我是 h2 数据库的新手。我需要在 h2 数据库中执行一个 sql 脚本文件。我有一个脚本文件 test.sql,我想在 h2 数据库中执行它。有可能吗?
【问题讨论】:
标签: h2 sql-scripts
首先我想说我是 h2 数据库的新手。我需要在 h2 数据库中执行一个 sql 脚本文件。我有一个脚本文件 test.sql,我想在 h2 数据库中执行它。有可能吗?
【问题讨论】:
标签: h2 sql-scripts
您可以使用RUNSCRIPT SQL statement:
RUNSCRIPT FROM 'test.sql'
或者你可以使用RunScript standalone / command line tool:
java -cp h2*.jar org.h2.tools.RunScript -url jdbc:h2:~/test -script test.sql
您还可以在应用程序中使用 RunScript 工具:
RunScript.execute(conn, new FileReader("test.sql"));
【讨论】:
bootstrap.sql,它只包含RUNSCRIPT FROM 'test.sql',我的test.sql 是引导文件的兄弟。如果我运行jdbc:h2:mem:etsnom;INIT=RUNSCRIPT FROM 'C:/workspace/bootstrap.sql',我会得到FileNotFoundException
如果您在 H2 中使用 spring-boot 和 spring-test,它将自动在您的类路径中查找 schema.sql 和 data.sql 并尝试运行它们。因此,如果您将它们放在src/test/resources 中,它们应该会被拾取并自动运行
此外,您可以使用属性指定要运行的数据文件。例如添加一个属性到 yourapplication.properties 喜欢
spring.datasource.data=classpath:users.sql, classpath:books.sql, classpath:reviews.sql
将配置spring来运行这三个sql文件而不是运行data.sql
【讨论】:
在 OSX(这不应该很重要)上使用 v. 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。这是完整的命令:
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,请从 here 下载(单击每个版本旁边的 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 日更新)
【讨论】:
java -cp h2*.jar org.h2.tools.RunScript -? 显示可用选项。但是,我无法找到更详细地解释这些的文档。例如,选项[-checkResults] Check if the query results match the expected results 听起来很有趣,但我找不到如何提供预期结果的解释。
对我来说,系统回应:
没有找到 org.h2.tools.RunScript 驱动程序
解决办法是:
java -classpath <path_to_your_h2-*.jar> org.h2.tools.RunScript \
-url jdbc:h2:tcp://localhost/~/test -script test.sql
【讨论】: