web-dev-qa-db-fra.com

Connectez-vous à la base de données H2 à l'aide du client de base de données IntelliJ

L'application My Grails utilise une base de données h2 en mode dev (le comportement par défaut des applications Grails). Les paramètres de connexion à la base de données dans DataSource.groovy sont

dataSource {
    pooled = true
    jmxExport = true
    driverClassName = "org.h2.Driver"
    username = "sa"
    password = ""
    dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
    url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
}

J'essaie de configurer une connexion pour cette base de données à l'aide des outils client de base de données d'IntelliJ IDEA. Je commence par créer la connexion comme si

enter image description here

Ensuite, dans la boîte de dialogue suivante, j'entre l'URL JDBC

enter image description here

Et choisissez toutes les bases de données disponibles dans l'onglet "Schémas et tables".

enter image description here

Le bouton "Tester la connexion" indique le succès, mais comme vous pouvez le voir sur le cercle rouge, aucun tableau n'a été trouvé. Il semble que j'ai correctement configuré une connexion au serveur h2, mais pas le schéma lui-même.

BTW, j'essaie de configurer cette connexion une fois l'application en cours d'exécution, donc je suis sûr que le schéma/les tables existent réellement.

47
Dónal

Votre configuration est pour un h2:mem base de données. Les bases de données en mémoire n'ont aucune table lors de la connexion, et toutes les tables sont perdues lorsque toutes les connexions sont fermées. De plus, une base de données en mémoire (nommée) est unique au processus JVM qui l'ouvre. De la documentation H2 :

Parfois, plusieurs connexions à la même base de données en mémoire sont requises. Dans ce cas, l'URL de la base de données doit inclure un nom. Exemple: jdbc: h2: mem: db1. L'accès à la même base de données à l'aide de cette URL ne fonctionne que dans le même environnement de machine virtuelle et de chargeur de classes. (caractères gras ajoutés)

Cela signifie que IDEA créera un devDb unique dans son espace JVM (et chargeur de classes) et votre application créera un devDb unique dans sa JVM (et son chargeur de classes). Vous ne pouvez pas vous connecter à une base de données en mémoire à partir d’un processus JVM externe.

Si vous souhaitez connecter simultanément votre application et IntelliJ IDEA (ou tout autre outil de base de données)) à une base de données H2, vous devez soit:

  1. utilisez une base de données intégrée (qui écrit dans un fichier) dans votre application et utilisez Mixed Mode pour autoriser IntelliJ IDEA (et/ou d’autres outils de base de données)) à s'y connecter
  2. utiliser une base de données en mode serveur

Voir http://www.h2database.com/html/features.html#connection_modes pour plus d'informations.

66
Javaru

Cet article explique en détail comment configurer le client de base de données IntelliJ pour se connecter à une base de données en mémoire H2 si vous utilisez Spring Boot: https://techdev.io/en/developer- blog/querying-the-embedded-h2-database-of-a-spring-boot-application

Fondamentalement, vous encapsulez la base de données en mémoire avec un serveur TCP, puis vous disposez d'un point d'accès pour vous connecter à un client SQL via un accès à distance.

19
Jason White

Pendant le développement, vous pouvez utiliser grails h2 dbconsole

2
demon101

Essayez d'ouvrir http: // localhost: 8080/dbconsole et remplissez votre url jdbc enter image description here

0
Peter.Chu