是否可以让 H2 在内存数据库中自动创建架构?

2022-08-31 09:35:17

(我已经通过Spring/Hibernate问题看到了H2数据库在内存中 - 初始化模式;它在这里不适用。

我想知道H2中是否有一个设置,允许我在连接到它时自动创建架构。如果它有帮助,我只对内存中的情况感兴趣。

H2支持URL末尾的各种分号分隔修饰符,但我没有找到一个用于自动创建架构的修饰符。有这样的功能吗?


答案 1

是的,H2 支持在连接时执行 SQL 语句。您可以运行一个脚本,也可以只运行一两个语句:

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


答案 2

如果您将弹簧与 一起使用,则以下内容将为您工作:application.yml

spring:
  datasource:
    url: jdbc:h2:mem:mydb;DB_CLOSE_ON_EXIT=FALSE;MODE=PostgreSQL;INIT=CREATE SCHEMA IF NOT EXISTS calendar

推荐