Подключение к базе данных 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
Ответ 4
Попробуйте открыть http://localhost:8080/dbconsole и заполнить свой URL-адрес jdbc
![введите описание изображения здесь]()