H2 Console Cant см. Таблицы, созданные JAVA
Я загрузил консоль H2 из http://www.h2database.com/html/download.html
и я настроил URL-адрес в файле jdbc.properties
до jdbc:h2:c:/data/Messaging
.
Я использую тот же URL-адрес в файле для подключения к базе данных, но я не вижу эти таблицы;
Я могу видеть только информационную схему, и когда я пытаюсь select * from tables
в ней, я тоже не вижу таблицы.
Кто-нибудь знает, что может быть неправильным?
Ответы
Ответ 1
Основываясь на вашем вопросе, это не похоже на то, что вы стали жертвой этой конкретной ловушки, но этот поток помог мне решить проблему, поэтому я записываю решение здесь для потомков, так как это может помочь другим людям с та же проблема.
Я также обнаружил, что когда я попытался открыть свою базу данных с помощью консоли H2, я получил то, что оказалось пустой базой данных H2 (в основном, просто таблицей INFORMATION_SCHEMA). При двойной проверке, что я правильно получил имя базы данных (mydb.mv.db
), я обнаружил, что консоль H2 создала второй файл базы данных mydb.mv.db.mv.db
. Одд.
Оказывается, что Консоль H2 ожидает, что вы должны опустить суффикс .mv.db
из имени файла. Поскольку я этого не делал, он искал mydb.mv.db.mv.db
. Изменение строки JDBC на jdbc:h2:mydb
решило проблему, и я смог открыть файл из консоли H2.
Ответ 2
Одна хитрость в том, что консоль H2 не выдаст вам ошибку, если вы попытаетесь подключиться к несуществующему URL JDBC. Вместо этого он создаст новую базу данных по этому URL! Чтобы подключиться к БД в памяти, используйте этот URL JDBC (http://localhost: 8080/h2-console - консоль по умолчанию):
jdbc:h2:mem:testdb
Если вы введете что-то вроде jdbc: h2: ~/test, то файл test.mv будет создан в вашем домашнем каталоге. Но ваше приложение все равно будет использовать базу данных в памяти.
Консоль доступна, если у вас есть зависимость h2 в вашем pom, а также зависимость средств разработки Spring. Если у вас нет зависимости от инструментов, вы также можете увидеть ее, имея зависимость h2 и добавив в файл application.properties следующее:
spring.h2.console.enabled=true #not needed if you have spring-boot-devtools dependency
Если вы хотите, чтобы БД была в виде файла, а не в памяти, добавьте следующее в application.properties:
spring.datasource.url=jdbc:h2:~/test_db #You will see the file in your home directory.
H2 не предназначен для постоянных данных, но если вы хотите сохранить для целей тестирования, добавьте:
spring.jpa.hibernate.ddl-auto = update
Затем запустите приложение и на консоли используйте этот URL JDBC:
jdbc:h2:~/test_db
Если вам интересно, у меня есть только 1 запись в application.properties (для файла базы данных), и вот мои зависимости:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
Ответ 3
Имел ту же проблему.
Это решило это для меня:
Почему моя встроенная программа h2 записывается в файл .mv.db
Просто добавлен ;MV_STORE=FALSE
и ;MVCC=FALSE
в URL-адрес jdbc, и все работает отлично.
Ответ 4
Вот как вы включаете базу данных разрешения памяти, используя модуль h2. Вам необходимо обеспечить следующее
- У вас был класс с аннотациями @Entity.
- Вам нужно включить следующее в файле application.properties
spring.h2.console.enabled=true
- Запустите Spring Boot и введите следующий URL
localhost:8080/h2-console
- Это покажет экран подключения. Введите следующие изменения в
JDBC URL:
→ jdbc:h2:mem:testdb
5. Нажмите кнопку подключения
Сала
Ответ 5
Я использовал ниже, и я вижу, что моя таблица создана.
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE
spring.h2.console.enabled=true
spring.h2.console.path=/h2console
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driverClassName=org.h2.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
Ответ 6
Вы также можете избежать этой проблемы, используя ту же самую версию между консолью H2 и кодом Java.
Вот как я решил эту же проблему здесь.
Ответ 7
Добавьте аннотацию @EntityScan ("packageName") в основной класс
Ответ 8
Если кто-то использует Spring boot и у вас возникла эта проблема, это должно быть полезно для вас, так как у меня была такая же проблема. Ответ от MattC выше (отвечено 27 апреля '18 в 21:03) помог мне понять, как посмотреть мою таблицу в БД в памяти. В основном просто нужно изменить URL JDBC в консоли H2. Благодарю.