Baza danych H2 w pamięci przechowuje dane w pamięci w JVM. Gdy JVM kończy pracę, dane te są tracone.
Podejrzewam, że to, co robisz, jest podobne do dwóch poniższych klas Java. Jedna z tych klas tworzy tabelę, a druga próbuje wstawić do niej:
import java.sql.*;
public class CreateTable {
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new org.h2.Driver());
Connection c = DriverManager.getConnection("jdbc:h2:mem:test");
PreparedStatement stmt = c.prepareStatement("CREATE TABLE PERSON (ID INT PRIMARY KEY, FIRSTNAME VARCHAR(64), LASTNAME VARCHAR(64))");
stmt.execute();
stmt.close();
c.close();
}
}
i
import java.sql.*;
public class InsertIntoTable {
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new org.h2.Driver());
Connection c = DriverManager.getConnection("jdbc:h2:mem:test");
PreparedStatement stmt = c.prepareStatement("INSERT INTO PERSON (ID, FIRSTNAME, LASTNAME) VALUES (1, 'John', 'Doe')");
stmt.execute();
stmt.close();
c.close();
}
}
Kiedy prowadziłem te klasy jedna po drugiej, otrzymałem następujące dane wyjściowe:
C: \ Users \ Luke \ stuff> java CreateTable
C: \ Users \ Luke \ stuff> java InsertIntoTable
Wyjątek w wątku „main” org.h2.jdbc.JdbcSQLException: Nie znaleziono tabeli „PERSON”; Instrukcja SQL:
WSTAW DO OSOBY (ID, NAZWISKO, LASTNAME) WARTOŚCI (1, „John”, „Doe”) [42102-154]
at org.h2.message.DbException.getJdbcSQLException (DbException.java:327)
at org.h2.message.DbException.get (DbException.java:167)
at org.h2.message.DbException.get (DbException.java:144)
...
Gdy tylko pierwszy java
proces zakończy się, utworzona przez CreateTable
nie tabela już nie istnieje. Kiedy pojawia się klasa InsertIntoTable, nie ma w niej tabeli do wstawienia.
Kiedy zmieniłem parametry połączenia na jdbc:h2:test
, okazało się, że nie było takiego błędu. Odkryłem również, że test.h2.db
pojawił się plik . W tym miejscu H2 umieścił tabelę, a ponieważ przechowywano ją na dysku, tabela wciąż tam była do znalezienia dla klasy InsertIntoTable.
Person
ponownie utworzyć tabelę . H2 nie wie nic wcześniej o bazie danych utworzonej na dysku.