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
puis dans la boîte de dialogue suivante, j'entre L'URL JDBC
<!-Choisir toutes les bases de données disponibles sur l'onglet "schémas et Tables".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.
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
- 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 à - utiliser une base de données en mode serveur
http://www.h2database.com/html/features.html#connection_modes pour plus d'informations.
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.
pendant le développement, vous pouvez utiliser des grains H2 dbconsole