2010-03-14 36 views
14

Hay un archivo de base de datos de H2 en mi directorio src (Java, Eclipse): h2test.dbh2 (modo integrado) presenta un problema de base de datos

El problema:

  • iniciar el h2.jar desde la línea de comandos (y por lo tanto la interfaz del navegador h2 en el puerto 8082), he creado 2 tablas, 'test1' y 'test2' en h2test.db y he puesto algunos datos en ellas;

  • cuando intento acceder a ellos desde el código java (JDBC), me arroja "tabla no encontrada excepción". Un "show tables" del código java muestra un conjunto de resultados con 0 filas.

  • Además, al crear una nueva tabla ('newtest') del código java (CREATE TABLE ... etc), no puedo verlo al iniciar la interfaz del navegador h2.jar después; solo las otras dos tablas ('test1' y 'test2') se muestran (pero luego la tabla recién creada 'newtest' es accesible desde el código java).

No tengo experiencia con las bases de datos incrustadas; Creo que estoy haciendo algo fundamentalmente malo aquí. Mi suposición es que estoy accediendo al mismo archivo, una vez desde la aplicación Java y una desde la interfaz del navegador h2. Parece que no puedo entenderlo, ¿qué estoy haciendo mal aquí?

EDIT: conforme a lo solicitado, añadiendo un poco de código:

código Java:

Class.forName("org.h2.Driver"); 
String url = "jdbc:h2:" + "db/h2test.db"; 
String user = "aeter"; 
String password = "aeter"; 
Connection conn = DriverManager.getConnection(url, user, password); 
PreparedStatement ps2 = conn.prepareStatement("Show tables;"); 
ResultSet rs = ps2.executeQuery();

Este conjunto de resultados tiene 0 filas (no hay mesas), en vez de mostrarme las 2 tablas.

H2 configuración de la interfaz de la consola en el navegador:

Settings: Generic h2(embedded) 
driver class: org.h2.Driver 
JDBC URL: jdbc:h2:../../workspace/project_name/src/db/h2test.db 
user name: aeter 
password: aeter 

Edit2: He copiado la base de datos a una nueva carpeta. Ahora el archivo db en la nueva carpeta se muestra con la tabla 'newtest' (del código java) y con las tablas 'test1' y 'test2' (de la interfaz h2 de la consola-navegador), exactamente de la misma manera que el anterior db archivo fue mostrado. Entonces el problema persiste con la copia del archivo db.

Respuesta

14

Para el modo integrado, deberá verificar la ruta. Por ejemplo, utilizar una ruta relativa al directorio de inicio:

"jdbc:h2:file:~/db/h2test.db" 

para estar seguro, utilice una ruta completa:

"jdbc:h2:file:/users/aeter/db/h2test.db" 

Para mayor comodidad, anexar ;IFEXISTS=TRUE para evitar la creación de archivos de base de espurios.

Ver Connecting to a Database using JDBC para más.

H2 Server Las URL son relativas al -baseDir especificado como parámetro a main().

+0

@Lubos: el enlace está muerto – Chris

+0

@Lubos: El resultado es "301 movido permanentemente". – trashgod

1

también le gusten este

"jdbc:h2:file:db/h2test.db" 

continuación, Java busca la carpeta db de carpeta del proyecto

->projectName // project folder 
-->src  // src folder 
-->db   // here your database folder 
-->.... 
1

Si está usando Hibernate intente esto en el archivo hibernate.cfg.xml:

<property name="connection.url">jdbc:h2:file:db/h2test</property> 

sin extensión * .db al final

3

También puede haber un problema si usa algunos parámetros especiales en su url JDBC, el nombre del archivo de base de datos puede diferir para varios casos.

En mi caso, tuve dos direcciones URL:

  • JDBC: H2: ~/XXX; MVCC = false; MV_STORE = FALSO
  • JDBC: H2: ~/XXX

Este primer caso creó el archivo XXX.h2.db, el segundo XXX.mv.db, ten cuidado.

+0

Estos archivos mv.db están habilitados por defecto desde h2 Versión 1.4.177 Beta (2014-04-12) Evidencia: http://www.h2database.com/html/changelog.html?highlight=mv_store – Reborn

Cuestiones relacionadas