O banco de dados na memória H2 armazena dados na memória dentro da JVM. Quando a JVM sai, esses dados são perdidos.
Eu suspeito que o que você está fazendo é semelhante às duas classes Java abaixo. Uma dessas classes cria uma tabela e a outra tenta inserir nela:
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();
}
}
e
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();
}
}
Quando executei essas classes uma após a outra, obtive a seguinte saída:
C: \ Usuários \ Lucas \ coisas> Java CreateTable
C: \ Users \ Luke \ stuff> java InsertIntoTable
Exceção no encadeamento "main" org.h2.jdbc.JdbcSQLException: Tabela "PERSON" não encontrada; Instrução SQL:
INSERIR NA PESSOA (ID, PRIMEIRO NOME, SOBRENOME) VALORES (1, 'João', 'Corça') [42102-154]
em org.h2.message.DbException.getJdbcSQLException (DbException.java:327)
em org.h2.message.DbException.get (DbException.java:167)
em org.h2.message.DbException.get (DbException.java:144)
...
Assim que o primeiro java
processo termina, a tabela criada por CreateTable
não existe mais. Portanto, quando a classe InsertIntoTable aparecer, não haverá tabela para inserir.
Quando alterei as cadeias de conexão para jdbc:h2:test
, descobri que não havia esse erro. Também descobri que um arquivo test.h2.db
havia aparecido. Foi aqui que H2 colocou a tabela e, como ela foi armazenada em disco, a tabela ainda estava lá para a classe InsertIntoTable encontrar.
Person
novamente. H2 não sabe nada sobre o banco de dados que você criou no disco antes.