Подключение к базе данных H2 с использованием клиента базы данных IntelliJ

Приложение My Grails использует базу данных h2 в режиме dev (поведение по умолчанию для приложений Grails). Настройки соединения с DB в 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"
}

Я пытаюсь установить соединение для этой базы данных с помощью инструментов клиента базы данных IntelliJ IDEA. Я начинаю создавать соединение так:

enter image description here

Затем в следующем диалоговом окне введите URL-адрес JDBC

enter image description here

И выберите все доступные базы данных на вкладке "Схемы и таблицы".

enter image description here

Кнопка "Проверить соединение" указывает на успех, но, как видно из красного круга, таблицы не найдены. Похоже, я правильно установил соединение с сервером h2, но не с самой схемой.

Кстати, я пытаюсь настроить это соединение после запуска приложения, поэтому я уверен, что схемы/таблицы действительно существуют.

Ответ 1

Ваша конфигурация предназначена для базы данных h2:mem. Базы данных памяти не имеют таблиц при подключении к ним, и все и все таблицы теряются, когда все соединения закрыты. Кроме того, база данных с именем (named) в памяти уникальна для процесса JVM, который открывает его. Из документа H2:

Иногда требуется несколько подключений к одной и той же базе данных в памяти. В этом случае URL-адрес базы данных должен содержать имя. Пример: jdbc: h2: mem: db1. Доступ к одной и той же базе данных с использованием этого URL-адреса работает только в рамках той же самой виртуальной машины и среды загрузчика классов. (добавлен акцент)

Это означает, что IDEA создаст уникальный devDb в своем пространстве JVM (и загрузчика классов), и ваше приложение создаст уникальный devDb в своем пространстве JVM (и загрузчика классов). Вы не можете подключиться к базе данных из базы данных из внешнего процесса JVM.

Если вы хотите одновременно подключить как ваше приложение, так и IntelliJ IDEA (или любой другой инструмент DB) к базе данных H2, вам нужно либо

  • используйте встроенную базу данных (которая записывает в файл) в ваше приложение и используйте Mixed Mode, чтобы позволить IntelliJ IDEA (и/или другим инструментам базы данных) подключиться к ней.
  • использовать базу данных режима сервера

Для получения дополнительной информации см. http://www.h2database.com/html/features.html#connection_modes.

Ответ 2

В этой статье рассказывается о том, как настроить клиент базы данных IntelliJ для подключения к базе данных H2 в памяти, если вы используете Spring Boot: https://techdev.io/en/developer-blog/querying-the-embedded-h2-database-of-a-spring-boot-application

В принципе, вы завершаете базу данных в памяти с помощью tcp-сервера, тогда у вас есть точка доступа для подключения к SQL-клиенту через удаленный доступ.

Ответ 3

В процессе разработки вы можете использовать grails h2 dbconsole