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, '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는 이전에 디스크에서 만든 데이터베이스에 대해 아무것도 모릅니다.