with support memoria datos base_datos java database jar packaging h2

java - support - Empaquetar y usar base de datos incrustada(archivo H2.db) dentro de un tarro?



java in memory database (1)

Si desea incrustar el archivo myDatabase.h2.db dentro de .jar , puede hacerlo, pero tendrá acceso de solo lectura a la base de datos. Como los archivos .jar son de solo lectura, no puede modificarlos y, por lo tanto, no puede ejecutar INSERT , DELETE ni ningún comando DDL.

Dicho esto, a continuación encontrará una explicación sobre cómo incrustarlo como de solo lectura.

De acuerdo con la documentación de H2 :

La URL JDBC "jdbc:h2:~/myDatabase" le dice al Motor H2 que busque un archivo de base de datos llamado myDatabase.h2.db en el directorio de inicio del usuario actual.

La URL de JDBC "jdbc:h2:file:/myDatabase" le dice a H2 Engine que busque un archivo de base de datos llamado myDatabase.h2.db en el directorio actual (donde se ejecutó el programa java).

Si incrusta el archivo h2.db dentro de .jar , no se puede acceder de forma simple. Solo se puede acceder como un archivo dentro de un archivo zip.

Para que H2 lo use, debes usar un zip como URL:

jdbc:h2:zip:~/data.zip!/test

Consulte más en " Bases de datos de solo lectura en archivo Zip o Jar ".

Cuando incrusta el archivo como un recurso en el contenedor, puede obtener su URL relativa. Utilizando...

MyClass.class.getClassLoader().getResource("myDatabase.h2.db")

... obtendrás algo así como:

jar:file:/C:/folder1/folder2/myJar.jar!/myDatabase.h2.db

A continuación, puede manipularlo como una cadena y pasar como conexión URL JDBC a H2.

Estoy usando la base de datos incrustada H2 para mi aplicación. Me gustaría incluir todo lo que la aplicación necesita en su propio Jar, incluida su base de datos si es posible. Mi aplicación no necesita crear archivos temporales ni nada, por lo que básicamente el usuario solo ejecuta el Jar.

¿Es posible incrustar una base de datos dentro de un Jar, y poder INSERT nuevos registros y simplemente SELECT ?

EDITAR: solo para aclarar, no estoy buscando incrustar el contenedor H2 en mi jar distribuible, estoy buscando insertar el archivo de base de datos h2 ( someDatabase.h2.db ) dentro de un Jar y aún así poder escribir / leer desde esa base de datos.