Database in-memory H2 menyimpan data dalam memori di dalam JVM. Ketika JVM keluar, data ini hilang.
Saya menduga bahwa apa yang Anda lakukan mirip dengan dua kelas Java di bawah ini. Salah satu dari kelas-kelas ini membuat tabel dan yang lain mencoba untuk memasukkannya:
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();
}
}
dan
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();
}
}
Ketika saya menjalankan kelas-kelas ini satu demi satu, saya mendapat hasil sebagai berikut:
C: \ Users \ Luke \ stuff> java CreateTable
C: \ Users \ Luke \ stuff> java InsertIntoTable
Pengecualian di utas "utama" org.h2.jdbc.JdbcSQLException: Tabel "PERSON" tidak ditemukan; Pernyataan SQL:
MASUKKAN ORANG (ID, FIRSTNAME, LASTNAME) NILAI (1, 'John', 'Doe') [42102-154]
di org.h2.message.DbException.getJdbcSQLException (DbException.java:327)
di org.h2.message.DbException.get (DbException.java:167)
di org.h2.message.DbException.get (DbException.java:144)
...
Segera setelah java
proses pertama keluar, tabel yang dibuat oleh CreateTable
tidak ada lagi. Jadi, ketika kelas InsertIntoTable datang, tidak ada tabel untuk dimasukkan.
Ketika saya mengubah string koneksi ke jdbc:h2:test
, saya menemukan bahwa tidak ada kesalahan seperti itu. Saya juga menemukan bahwa file test.h2.db
telah muncul. Di sinilah H2 meletakkan tabel, dan karena itu telah disimpan di disk, tabel itu masih ada untuk ditemukan kelas InsertIntoTable.
Person
lagi. H2 tidak tahu apa-apa tentang database yang Anda buat di disk sebelumnya.