La base de datos H2 en memoria almacena datos en la memoria dentro de la JVM. Cuando la JVM sale, estos datos se pierden.
Sospecho que lo que está haciendo es similar a las dos clases de Java a continuación. Una de estas clases crea una tabla y la otra intenta insertarla:
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();
}
}
y
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();
}
}
Cuando ejecuté estas clases una tras otra, obtuve el siguiente resultado:
C: \ Users \ Luke \ stuff> java CreateTable
C: \ Users \ Luke \ stuff> java InsertIntoTable
Excepción en el hilo "main" org.h2.jdbc.JdbcSQLException: Tabla "PERSON" no encontrada; Instrucción SQL:
INSERTAR EN LA PERSONA (ID, NOMBRE, APELLIDOS) VALORES (1, 'John', 'Doe') [42102-154]
en org.h2.message.DbException.getJdbcSQLException (DbException.java:327)
en org.h2.message.DbException.get (DbException.java:167)
en org.h2.message.DbException.get (DbException.java:144)
...
Tan pronto como java
se cierra el primer proceso, la tabla creada por CreateTable
ya no existe. Entonces, cuando aparece la clase InsertIntoTable, no hay una tabla para insertarla.
Cuando cambié las cadenas de conexión a jdbc:h2:test
, encontré que no había tal error. También encontré que test.h2.db
había aparecido un archivo . Aquí era donde H2 había colocado la tabla, y como se había almacenado en el disco, la tabla todavía estaba allí para que la clase InsertIntoTable la encontrara.
Person
volver a crear la tabla . H2 no sabe nada sobre la base de datos que creó en el disco antes.