2010-05-04 33 views
9

estoy teniendo problemas con la creación de una en la tabla de memoria, utilizando la base de datos de H2, y para acceder a él fuera de JVM se crea y se ejecuta en.tablas h2 en memoria, conexión remota

Las estructuras de documentación de la URL como jdbc:h2:tcp://<host>/mem:<databasename>

He intentado muchas combinaciones, pero simplemente no puedo hacer que la conexión remota funcione. Si esta característica funciona, ¿alguien puede darme los detalles de cómo usaron esto?

+0

Sería bueno si enumeró las combinaciones que intentó. –

+0

¿Tiene algún problema con la configuración del servidor (para escuchar en algún puerto TCP) o el cliente (para conectarse al servidor)? –

Respuesta

10

Puede consultar In-Memory Databases. Para una conexión de red, necesita un nombre de host y base de datos. Parece que quiere jdbc:h2:tcp://localhost/mem:db1 o jdbc:h2:tcp://127.0.0.1/mem:db1

2

Habiendo enfrentado a este problema que encontré lo que necesitaba para añadir DB_CLOSE_DELAY=-1 a la URL de JDBC para la conexión TCP . Así mis URL fueron:

  • en memoria: jdbc:h2:mem:dbname
  • conexión TCP: jdbc:h2:tcp://localhost:9092/dbname;DB_CLOSE_DELAY=-1

From the h2 docs:

Por defecto, el cierre de la última conexión con una base de datos se 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, agregue ;DB_CLOSE_DELAY=-1 a la base de datos URL.

No incluye DB_CLOSE_DELAY=-1 significa que no puedo conectarme a la base de datos correcta a través de TCP. La conexión está hecha, pero usa una versión diferente a la creada en la memoria (validada usando el parámetro IFEXISTS=true)

5

Ninguna de las soluciones mencionadas hasta ahora funcionó para mí. La parte remota simplemente no se pudo conectar.

Según official documentation de H2:

Para acceder a una base de datos en la memoria de otro proceso o desde otro ordenador, que necesita para iniciar un servidor TCP en el mismo proceso que se ha creado la base de datos en memoria. Los otros procesos necesitan acceder a la base de datos a través de TCP/IP o TLS, usando una URL de base de datos tal como: jdbc: h2: tcp: // localhost/mem: db1.

Marqué la parte crucial del texto en negrita.

y me encontré con una solución de trabajo en casa de este tipo blog:

El primer proceso se va a crear la base de datos, con la siguiente URL:

jdbc:h2:mem:db1

y que va a necesitar para iniciar un servidor tcp:

org.h2.tools.Server server = org.h2.tools.Server.createTcpServer().start();

Los otros procesos pueden acceder a su base de datos mediante el uso de la siguiente URL:

"jdbc:h2:tcp://localhost/mem:db1"

Y eso es todo! ¡Trabajado como un encanto!

Cuestiones relacionadas