База данных H2 в памяти хранит данные в памяти внутри JVM. Когда 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: \ Users \ Luke \ stuff> Java CreateTable
C: \ Users \ Luke \ stuff> Java InsertIntoTable
Исключение в потоке "main" org.h2.jdbc.JdbcSQLException: таблица "PERSON" не найдена; Оператор SQL:
ВСТАВИТЬ В ЧЕЛОВЕКА (ID, ИМЯ, ФАМИЛИЯ) ЦЕННОСТИ (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 ничего не знает о базе данных, которую вы создали на диске раньше.