サーブレットコンテキストの起動時に次のコードを使用して、H2データベースにインメモリデータベースを作成しています
void initDb() {
try {
webserver = Server.createWebServer().start();
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:mem:db1;DB_CLOSE_DELAY=-1","SA","");
InputStream in = getClass().getResourceAsStream("script.sql");
if (in == null) {
System.out.println("Please add the file script.sql to the classpath, package " + getClass().getPackage().getName());
} else {
RunScript.execute(conn, new InputStreamReader(in));
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("SELECT TO_CHAR(bday,'DD/MM/yyyy hh24:mi') FROM TEST2");
while (rs.next()) {
System.out.println(rs.getString(1));
}
rs.close();
stat.close();
conn.commit();
conn.close();
}
//accessed using url jdbc:h2:tcp://localhost/mem:db1
try{
CachedRowSet crs = new DBConnector().executeQuery("select * from test2");
while(crs.next()){
System.out.println("ARGUMENT_NAME:"+crs.getString(1));
// System.out.println(",DATA_TYPE:"+crs.getString("DATA_TYPE"));
}
crs.close();
}catch(SQLException e){
e.printStackTrace();
}
} catch (Exception e) { //this exception gets throws connection failed!
System.out.println("Exception initializing memory H2 database"+e);
}
}
後でjdbc:h2:mem:db1
同じJVMのURLでアクセスしますが、これも機能しています。しかし、アクセスしたい場合jdbc:h2:tcp://localhost/mem:db1
は、同じJVMでも別のJVMでも機能しません。
実際にシステムを組み込みモードで実行し、コンソールを使用して内容を確認したいと思います。同じサーブレットコンテキストの起動方法でWebサーバーを起動すると、コンソールが表示されますが、URLを使用してメモリ内のDBに接続できませんjdbc:h2:tcp://localhost/mem:db1
。
コマンドラインを使用してサーバーを起動した場合
java -cp "WebContent/WEB-INF/lib/h2-1.3.148.jar;hsqldb.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Console %*
and url as 'jdbc:h2:tcp://localhost/mem:db1'
そして、接続してみてください。驚くべきことに、接続されていますが、データはありません。独自のサーバーと別のデータベースを作成しているようです。したがって、データはありません。