インメモリで初期化を行います。そのときにRunscriptを使うサンプルです。 - H2 その2 また別のやりか
2014/09/02
h2
java
RUNSCRIPT
前回
プログラマメモ2: インメモリで初期化を行います。そのときにRunscriptを使うサンプルです。 - H2
コードでやる分にはこれでいいんだけど、まあ大概は、データソースを指定時にRUNSCRIPTするだろうから、クラスパスからRUNSCRIPTを指定する場合どうするんだろうってことで、
参考:
java - problem with INIT=RUNSCRIPT and relative paths - Stack Overflow
こんな感じ(複数のRUNSCRIPTを動作させることを想定)
以下コード
プログラマメモ2: インメモリで初期化を行います。そのときにRunscriptを使うサンプルです。 - H2
コードでやる分にはこれでいいんだけど、まあ大概は、データソースを指定時にRUNSCRIPTするだろうから、クラスパスからRUNSCRIPTを指定する場合どうするんだろうってことで、
参考:
java - problem with INIT=RUNSCRIPT and relative paths - Stack Overflow
こんな感じ(複数のRUNSCRIPTを動作させることを想定)
jdbc:h2:mem:test;INIT=RUNSCRIPT FROM 'classpath:resources/create.sql'\;RUNSCRIPT FROM 'classpath:resources/populate.sql'\;;DB_CLOSE_DELAY=-1;セミコロンが冗長だけど、そこは目をつぶって。。。。
以下コード
package deiji_gamebook_app.db;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class TestDb2 {
public static Connection connection() throws SQLException, IOException {
StringBuilder builder = new StringBuilder();
String[] paths = { "resources/create.sql", "resources/populate.sql" };
for (String s : paths) {
// 参考:Stack Overflow
// classpath: をつけるといいみたい。
// jarにしても多分大丈夫かも
builder.append("RUNSCRIPT FROM ").append("'").append("classpath:")
.append(s).append("'").append("\\;");
}
// DB_CLOSE_DELAY=-1をつけることでVM が生存している間接続OK
String url = "jdbc:h2:mem:test;INIT=" + builder + ";DB_CLOSE_DELAY=-1;";
System.out.println(url);
Connection connection = DriverManager.getConnection(url);
return connection;
}
}
: