Base de datos H2 en memoria. Tabla no encontrada

Resuelto Jorn asked hace 13 años • 28 respuestas

Tengo una base de datos H2 con URL "jdbc:h2:test". Creé una tabla con el siguiente código

CREATE TABLE PERSON (
   ID INT PRIMARY KEY, 
   FIRSTNAME VARCHAR(64), 
   LASTNAME VARCHAR(64)
);

Luego selecciono todo de esta tabla (vacía) SELECT * FROM PERSON. Hasta ahora, todo bien.

Sin embargo, si cambio la URL a "jdbc:h2:mem:test", la única diferencia es que la base de datos ahora está solo en la memoria, lo que genera este error.

org.h2.jdbc.JdbcSQLException: Table "PERSON" not found; SQL
statement: SELECT * FROM PERSON [42102-154]

Probablemente me esté perdiendo algo simple aquí, pero agradecería cualquier ayuda.

Jorn avatar Apr 23 '11 17:04 Jorn
Aceptado

DB_CLOSE_DELAY=-1

hbm2ddl cierra la conexión después de crear la tabla, por lo que h2 la descarta.

Si tienes tu URL de conexión configurada así

jdbc:h2:mem:test

el contenido de la base de datos se pierde en el momento en que se cierra la última conexión.

Si quieres conservar tu contenido tienes que configurar la URL así

jdbc:h2:mem:test;DB_CLOSE_DELAY=-1

Si lo hace, h2 mantendrá su contenido mientras viva la máquina virtual .

Observe el punto y coma ( ;) en lugar de los dos puntos ( :).

Consulte la sección Bases de datos en memoria de la página Funciones . Citar:

De forma predeterminada, cerrar la última conexión a una base de datos cierra la base de datos. Para una base de datos en memoria, esto significa que el contenido se pierde. Para mantener la base de datos abierta, agréguela ;DB_CLOSE_DELAY=-1a la URL de la base de datos. Para mantener el contenido de una base de datos en memoria mientras la máquina virtual esté activa, utilice jdbc:h2:mem:test;DB_CLOSE_DELAY=-1.

reini2901 avatar May 09 '2011 12:05 reini2901

Sé que este no era tu caso, pero tuve el mismo problema porque H2 estaba creando las tablas con nombres en MAYÚSCULAS y luego distinguía entre mayúsculas y minúsculas, aunque en todos los scripts (incluidos los de creación) usé minúsculas.

Resuelto agregando ;DATABASE_TO_UPPER=falsea la URL de conexión.

Cristian Vrabie avatar Jul 29 '2013 13:07 Cristian Vrabie