ฐานข้อมูลในหน่วยความจำ 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:
INSERT INTO PERSON (ID, FIRSTNAME, LASTNAME) ค่า (1, 'John', 'Doe') [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 ไม่รู้อะไรเกี่ยวกับฐานข้อมูลที่คุณสร้างบนดิสก์มาก่อน