H2 bellek içi veritabanı, verileri JVM içindeki bellekte saklar. JVM çıktığında, bu veriler kaybolur.
Yaptığınız şeyin aşağıdaki iki Java sınıfına benzer olduğundan şüpheleniyorum. Bu sınıflardan biri bir tablo oluşturur ve diğeri tabloya eklemeye çalışır:
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();
}
}
ve
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();
}
}
Bu sınıfları peş peşe koştuğumda şu çıktıyı aldım:
C: \ Kullanıcılar \ Luke \ stuff> java CreateTable
C: \ Kullanıcılar \ Luke \ stuff> java InsertIntoTable
"Main" iş parçacığındaki kural dışı durum org.h2.jdbc.JdbcSQLException: Tablo "PERSON" bulunamadı; SQL deyimi:
KİŞİ İÇERİN (INS, FIRSTNAME, LASTNAME) DEĞERLERİ (1, 'John', 'Doe') [42102-154]
at org.h2.message.DbException.getJdbcSQLException (DbException.java:327)
org.h2.message.DbException.get adresinde (DbException.java:167)
org.h2.message.DbException.get (DbException.java:144) adresinde
...
İlk java
işlem biter bitmez , oluşturulan tablo CreateTable
artık mevcut değildir. Bu nedenle, InsertIntoTable sınıfı geldiğinde, içine eklenecek bir tablo yoktur.
Bağlantı dizelerini değiştirdiğimde jdbc:h2:test
böyle bir hata olmadığını gördüm. Ayrıca bir dosyanın test.h2.db
ortaya çıktığını da buldum . H2, tabloyu koyduğu yerdi ve diskte depolandığından beri, InsertIntoTable sınıfının bulması için tablo hala oradaydı.
Person
yeniden oluşturmanız gerekir . H2, daha önce diskte oluşturduğunuz veritabanı hakkında hiçbir şey bilmiyor.