Я создаю базу данных в памяти в базе данных 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);
}
}
Позже я получаю доступ по URL jdbc:h2:mem:db1
в той же JVM, которая тоже работает.Но когда я хочу получить к нему доступ через jdbc:h2:tcp://localhost/mem:db1
, он не работает ни в той же JVM, ни в другой JVM.
Я на самом деле хочу запустить систему во встроенном режиме и просмотреть содержимое с помощью консоли.Если я запускаю веб-сервер в том же методе запуска контекста сервлета, я вижу консоль, но она все еще не подключается к БД в памяти с URL-адресом 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'
А затем попробуйте подключиться, как ни удивительно, он подключается, но без данных.Похоже, что он создает отдельный сервер самостоятельно, и это другой БД.Так что данных нет.