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.
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