Can I have H2 autocreate a schema in an in-memory database? Can I have H2 autocreate a schema in an in-memory database? java java

Can I have H2 autocreate a schema in an in-memory database?


Yes, H2 supports executing SQL statements when connecting. You could run a script, or just a statement or two:

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'";

Please note the double backslash (\\) is only required within Java. The backslash(es) before ; within the INIT is required.


If you are using spring with application.yml, the following will work for you:

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


What Thomas has written is correct, in addition to that, if you want to initialize multiple schemas you can use the following. Note there is a \\; separating the two create statements.

    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();

ref : http://www.h2database.com/html/features.html#execute_sql_on_connection