(我已经看到了H2 database In memory - Init schema via Spring/Hibernate问题;它在这里不适用。)
我想知道H2中是否有允许我在连接到模式时自动创建它的设置。如果有帮助,我只对内存中的情况感兴趣。
H2支持在URL末尾使用各种以分号分隔的修饰符,但我没有找到用于自动创建模式的修饰符。有这样的功能吗?
发布于 2011-03-08 13:05:27
是的,H2支持executing SQL statements when connecting。您可以运行一个脚本,或者只运行一两条语句:
String url = "jdbc:h2:mem:test;" +
"INIT=CREATE SCHEMA IF NOT EXISTS TEST"
String url = "jdbc:h2:mem:test;" +
"INIT=CREATE SCHEMA IF NOT EXISTS TEST\\;" +
"SET SCHEMA TEST";
String url = "jdbc:h2:mem;" +
"INIT=RUNSCRIPT FROM '~/create.sql'\\;" +
"RUNSCRIPT FROM '~/populate.sql'";
请注意,双反斜杠(\\
)只在Java中是必需的。INIT
中;
前的反斜杠是必需的。
发布于 2017-12-29 17:28:11
如果您将spring与application.yml
结合使用,则以下内容将适用于您:
spring:
datasource:
url: jdbc:h2:mem:mydb;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL;INIT=CREATE SCHEMA IF NOT EXISTS calendar
发布于 2018-04-06 22:33:39
Thomas所写的内容是正确的,除此之外,如果您想初始化多个模式,可以使用以下内容。注意,两个create语句之间有一个\\;
分隔。
EmbeddedDatabase db = new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.H2)
.setName("testDb;DB_CLOSE_ON_EXIT=FALSE;MODE=Oracle;INIT=create " +
"schema if not exists " +
"schema_a\\;create schema if not exists schema_b;" +
"DB_CLOSE_DELAY=-1;")
.addScript("sql/provPlan/createTable.sql")
.addScript("sql/provPlan/insertData.sql")
.addScript("sql/provPlan/insertSpecRel.sql")
.build();
参考:http://www.h2database.com/html/features.html#execute_sql_on_connection
https://stackoverflow.com/questions/5225700
复制相似问题