web-dev-qa-db-fra.com

H2 Console Cant voir les tables créées par JAVA

J'ai téléchargé la console H2 à partir de http://www.h2database.com/html/download.html
et j'ai configuré l'URL dans mon fichier jdbc.properties
to jdbc:h2:c:/data/Messaging.

J'utilise la même URL dans le fichier pour me connecter à la base de données mais je ne peux pas voir les tables; Je ne peux voir que le schéma d'information et lorsque j'essaie de select * from tables, je ne peux pas non plus voir les tables.

Est-ce que quelqu'un a une idée de ce qui pourrait être faux?

14
Dunken

Une chose délicate est que la console H2 ne vous donnera pas d'erreur si vous essayez de vous connecter à une URL JDBC qui n'existe pas. Au lieu de cela, il créera une nouvelle base de données à cette URL! Pour vous connecter à la base de données en mémoire, utilisez cette URL JDBC ( http: // localhost: 8080/h2-console est la console par défaut):

jdbc:h2:mem:testdb

Si vous devez entrer quelque chose comme jdbc: h2: ~/test, un fichier test.mv sera créé dans votre répertoire personnel. Mais votre application utilisera toujours la base de données en mémoire.

La console est disponible si vous avez la dépendance h2 dans votre pom, ainsi que la dépendance des outils de développement Spring. Si vous n'avez pas la dépendance aux outils, vous pouvez également le voir en ayant la dépendance h2 et en ajoutant ce qui suit dans votre fichier application.properties:

spring.h2.console.enabled=true  #not needed if you have spring-boot-devtools dependency

Si vous voulez que la base de données soit en tant que fichier et non en mémoire, ajoutez ce qui suit au fichier applications.properties:

spring.datasource.url=jdbc:h2:~/test_db  #You will see the file in your home directory.

H2 n'est pas destiné aux données persistantes, mais si vous souhaitez persister à des fins de test, ajoutez:

spring.jpa.hibernate.ddl-auto = update

Puis lancez l'application et utilisez la URL JDBC suivante sur la console:

jdbc:h2:~/test_db

Au cas où vous vous le demanderiez, je n'ai qu'une seule entrée dans application.properties (pour le fichier de base de données) et voici mes dépendances:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
</dependency>
13
MattC

D'après votre question, il ne semble pas que vous ayez été victime de ce piège particulier, mais ce fil de discussion m'a finalement aidé à comprendre le problème. C'est pourquoi je suis en train d'enregistrer la solution pour la postérité, car cela pourrait aider d'autres personnes avec le même problème.

J'ai également constaté que lorsque j'ai essayé d'ouvrir ma base de données avec la console H2, j'ai obtenu ce qui semblait être une base de données H2 vide (en gros, juste une table INFORMATION_SCHEMA). Tout en vérifiant que le nom de la base de données était correct (mydb.mv.db), j'ai découvert que la console H2 avait créé un deuxième fichier de base de données, mydb.mv.db.mv.db. Impair.

Il s'avère que la console H2 s'attend à ce que vous omettiez le suffixe .mv.db du nom du fichier. Comme je ne l’avais pas fait, je cherchais mydb.mv.db.mv.db. Changer la chaîne JDBC en jdbc:h2:mydb a résolu le problème et je pouvais ensuite ouvrir le fichier à partir de la console H2.

10
Dan Barowy

Avait le même problème.

Cela a résolu le problème pour moi: Pourquoi mon programme h2 intégré écrit-il dans un fichier .mv.db

Nous venons d'ajouter ;MV_STORE=FALSE et ;MVCC=FALSE à l'URL de jdbc et tout s'est bien passé.

9
Framus

Voici comment vous activez la base de données d'activation de la mémoire à l'aide du module h2. Vous devez vous assurer des points suivants

  1. Vous avez eu une classe qui a des annotations @Entity.
  2. vous devez activer les éléments suivants dans le fichier application.properties spring.h2.console.enabled=true
  3. Exécutez Spring Boot et entrez l'URL suivante localhost:8080/h2-console
  4. Cela montrera un écran de connexion. Entrez les modifications suivantes dans le JDBC URL: -> jdbc:h2:mem:testdb 5.Appuyez sur le bouton de connexion

Salam

6
HA S

J'ai utilisé ce qui suit et je vois que ma table est créée.


spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
spring.h2.console.enabled=true
spring.h2.console.path=/h2console
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
2
Krishnendu

Vous pouvez également éviter ce problème en utilisant la même version entre la console H2 et votre code Java.

Voici comment j'ai résolu le même problème ici .

0
Stephan

Ajouter Annotation @EntityScan ("packageName") dans la classe principale

0
VRadhe