База даних пам'яті H2 зберігає дані в пам'яті всередині JVM. При виході СВМ ці дані втрачаються.
Я підозрюю, що те, що ви робите, схоже на два класи Java нижче. Один із цих класів створює таблицю, а інший намагається вставити в неї:
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();
}
}
і
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();
}
}
Коли я проводив ці заняття один за одним, я отримав такий результат:
C: \ Користувачі \ Luke \ речі> java CreateTable
C: \ Користувачі \ Luke \ речі> java InsertIntoTable
Виняток у потоці "main" org.h2.jdbc.JdbcSQLException: Таблиця "ОСОБА" не знайдена; Оператор SQL:
ВСТУПИТИ В ОСОБЛИВОСТІ (ІД, ПІДПРИЄМНЕ, ЛАСНІМЕ) ЦІННОСТІ (1, "Джон", "Собака") [42102-154]
на org.h2.message.DbException.getJdbcSQLException (DbException.java:327)
на org.h2.message.DbException.get (DbException.java:167)
на org.h2.message.DbException.get (DbException.java:144)
...
Як тільки перший java
процес закінчується, створена таблиця CreateTable
вже не існує. Отже, коли приходить клас InsertIntoTable, у нього немає таблиці, яку можна вставити.
Коли я змінив рядки з'єднання на jdbc:h2:test
, я виявив, що такої помилки не було. Я також виявив, що файл test.h2.db
з'явився. Тут H2 поставив таблицю, і оскільки вона була збережена на диску, вона все ще була там, щоб знайти клас InsertIntoTable.
Person
. H2 нічого не знає про базу даних, яку ви створили на диску раніше.