2008-09-30 15 views
28

En este momento usamos HSQLDB como una base de datos incrustada, pero buscamos una base de datos con menos huella de memoria a medida que crece el volumen de datos.Incrustar la base de datos h2 de Java programáticamente

Derby/JavaDB no es una opción en este momento porque almacena propiedades globalmente en las propiedades del sistema. Entonces pensamos en h2.

Mientras usamos HSQLDB creamos un objeto de servidor, establecemos los parámetros y lo iniciamos. Esto se describe here (y dado como ejemplo en la clase org.hsqldb.test.TestBase).

La pregunta es: ¿se puede hacer esto análogamente con la base de datos h2 también? ¿Tienes algún ejemplo de código para eso? Al escanear la página h2, no encontré un ejemplo.

Respuesta

24

de la descarga, veo que el archivo tiene esta tutorial.html

import org.h2.tools.Server; 
... 
// start the TCP Server 
Server server = Server.createTcpServer(args).start(); 
... 
// stop the TCP Server 
server.stop(); 
63

Sí, puede ejecutar H2 en modo incrustado. Sólo tiene que utilizar el controlador JDBC y se conecta a un URL incorporado como esto (su ejemplo):

Esta base de datos se puede utilizar en el modo incrustado, o en modo servidor. Para utilizarlo en modo incrustado, es necesario:

* Add h2.jar to the classpath 
* Use the JDBC driver class: org.h2.Driver 
* The database URL jdbc:h2:~/test opens the database 'test' in your user home directory 

Ejemplo de conexión con JDBC a una base de H2 incrustado (adaptado de http://www.h2database.com/javadoc/org/h2/jdbcx/JdbcDataSource.html):

import org.h2.jdbcx.JdbcDataSource; 
// ... 
JdbcDataSource ds = new JdbcDataSource(); 
ds.setURL("jdbc:h2:˜/test"); 
ds.setUser("sa"); 
ds.setPassword("sa"); 
Connection conn = ds.getConnection(); 

Si usted está mirando para usa H2 en un modo puramente en memoria/incrustado, puedes hacerlo también. Vea este enlace para obtener más:

sólo tiene que utilizar una URL especial en el código JDBC normal como "jdbc: H2: mem: DB1".

+0

Necesito establecer las "propiedades" correctas, decir: tengo que - al menos - configurar el directorio en el que reside la base de datos. Esta es la razón por la cual no podemos usar Derby/JavaDB porque usa las propiedades del sistema, como se dijo en la pregunta. – Georgi

+0

Se está ejecutando en el puerto 8082, que no es una opción para h2. – Georgi

+0

No entiendo lo que dices. Nada aquí usa propiedades del sistema. Usted especifica un lugar para almacenar archivos. Depende de su aplicación decidir dónde hacer eso. Puede usar java.io.tmpdir para eso si lo desea. No se ejecuta en un puerto en modo integrado. –

Cuestiones relacionadas