Cơ sở dữ liệu trong bộ nhớ H2 lưu trữ dữ liệu trong bộ nhớ bên trong JVM. Khi JVM thoát, dữ liệu này sẽ bị mất.
Tôi nghi ngờ rằng những gì bạn đang làm tương tự như hai lớp Java bên dưới. Một trong các lớp này tạo một bảng và lớp kia cố gắng chèn vào nó:
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();
}
}
và
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();
}
}
Khi tôi chạy các lớp này lần lượt, tôi đã nhận được kết quả sau:
C: \ Users \ Luke \ Stuff> java CreatTable
C: \ Users \ Luke \ Stuff> java ChènIntoTable
Ngoại lệ trong luồng "chính" org.h2.jdbc.JdbcSQLException: Không tìm thấy bảng "PERSON"; Câu lệnh sql:
XÁC NHẬN VÀO CÁ NHÂN (ID, FIRSTNAME, LASTNAME) GIÁ TRỊ (1, 'John', 'Doe') [42102-154]
tại org.h2.message.DbException.getJdbcSQLException (DbException.java:327)
tại org.h2.message.DbException.get (DbException.java:167)
tại org.h2.message.DbException.get (DbException.java:144)
...
Ngay khi java
quá trình đầu tiên thoát ra, bảng được tạo bởi CreateTable
không còn tồn tại. Vì vậy, khi lớp insertIntoTable xuất hiện, không có bảng nào để chèn vào.
Khi tôi thay đổi chuỗi kết nối thành jdbc:h2:test
, tôi thấy rằng không có lỗi như vậy. Tôi cũng thấy rằng một tập tin test.h2.db
đã xuất hiện. Đây là nơi H2 đã đặt bảng và vì nó đã được lưu trên đĩa, nên bảng vẫn ở đó để tìm lớp ChènIntoTable.
Person
. H2 không biết gì về cơ sở dữ liệu bạn đã tạo trên đĩa trước đó.