我可以让H2在内存数据库中自动创build一个模式吗?

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

我想知道H2中是否有一个设置可以让我在连接的时候自动创build一个模式。 如果有帮助,我只对内存情况感兴趣。

H2支持URL末尾的各种以分号分隔的修饰符,但是我没有find自动创build模式的修饰符。 有这样的function吗?

是的,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是必需的。

“默认情况下,当应用程序调用DriverManager.getConnection(url, ...)并且URL中指定的数据库尚不存在时,将创build一个新的(空的)数据库。” – H2数据库 。

附录:@Thomas Mueller展示了如何在Connection执行SQL ,但我有时只是在代码中创build并填充,如下所示。

 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; /** @see http://stackoverflow.com/questions/5225700 */ public class H2MemTest { public static void main(String[] args) throws Exception { Connection conn = DriverManager.getConnection("jdbc:h2:mem:", "sa", ""); Statement st = conn.createStatement(); st.execute("create table customer(id integer, name varchar(10))"); st.execute("insert into customer values (1, 'Thomas')"); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("select name from customer"); while (rset.next()) { String name = rset.getString(1); System.out.println(name); } } }