Se connecter à la base de données H2 en utilisant le client de la base de données IntelliJ

mon application Grails utilise une base de données h2 en mode dev (le comportement par défaut pour les applications Grails). Les paramètres de connexion DB dans DataSource.groovy

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 en utilisant les outils client de la base de données D'IntelliJ IDEA. Je commence la création de la connexion comme

enter image description here

puis dans la boîte de dialogue suivante, j'entre L'URL JDBC

enter image description here

<!-Choisir toutes les bases de données disponibles sur l'onglet "schémas et Tables".

enter image description here

le bouton "Test Connection" indique le succès, mais comme vous pouvez le voir à partir du cercle rouge, aucune table n'est trouvée. 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 que l'application est en cours d'exécution, donc je suis sûr que le schéma/les tables existent réellement.

28
demandé sur Dónal 2015-03-09 14:28:51

4 réponses

Votre configuration est un h2:mem base de données. Les bases de données de mémoire n'ont pas de tables en se connectant à eux, et toutes les tables sont perdues quand toutes les connexions sont fermées. De plus, un (named) dans la base de Données mémoire est propre au processus JVM qui s'ouvre. À partir de la H2 documentation:

Parfois plusieurs connexions à la même base de données en mémoire sont requis. Dans ce cas, L'URL de la base de données doit inclure un nom. Exemple: jdbc: h2:mem: db1. accéder à la même base de données en utilisant cette URL ne fonctionne que dans le même environnement de machine virtuelle et de chargeur de classe. (non souligné dans l'original)

cela signifie que IDEA va créer undevDb dans son espace JVM (et classloader)et votre application va créer undevDb dans son espace JVM (et classloader). Vous ne pouvez pas vous connecter à une base de données en mémoire à partir d'un processus JVM externe.

si vous voulez connecter à la fois votre application et IntelliJ IDEA (ou tout autre outil DB) à une base de données H2 en même temps, vous aurez besoin de

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

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

44
répondu Javaru 2015-03-09 20:05:01

cet article a une bonne écriture sur la façon de configurer le client de base de données IntelliJ pour se connecter à une base de données H2 en mémoire si vous vous trouvez à utiliser la botte de printemps: https://techdev.io/en/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application

fondamentalement, vous enveloppez la base de données en mémoire avec un serveur tcp, puis vous avez un point d'accès pour vous connecter avec un client sql via un accès à distance.

13
répondu Jason White 2017-09-26 20:46:09

pendant le développement, vous pouvez utiliser des grains H2 dbconsole

2
répondu demon101 2015-08-25 19:36:07
-2
répondu Peter.Chu 2017-05-09 06:46:39