Я получаю сообщение об ошибке после открытия консоли базы данных h2. Я ввожу имя базы данных, но он показывает, что база данных не найдена:
Database "C:/Users/Barlekar/onlineshoppings" not found, and IFEXISTS=true, so we cant auto-create it [90146-199] 90146/90146 (Help)
org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database "C:/Users/Barlekar/onlineshoppings" not found, and IFEXISTS=true, so we cant auto-create it [90146-199]




Вы недавно обновили H2? Это может быть причиной.
Это связано со следующим коммитом H2:
https://github.com/h2database/h2database/commit/8b53f3999c6c5c3d5ca29020e2657968f4f59ec4
и изменение было сделано из-за этого эксплойта:
https://www.exploit-db.com/exploits/45506
Это означает, что по умолчанию для H2 теперь установлено автоматическое создание баз данных нет при работе в автономном сетевом режиме.
Если вы прочитали и поняли вышеизложенное, но по-прежнему хотите разрешить автоматическое создание базы данных, просто добавьте флаг -ifNotExists в команду запуска h2 следующим образом:
java -cp h2*.jar org.h2.tools.Server -ifNotExists
Пожалуйста, дайте нам решение.
@BandhamManikanta Как я уже писал в ответе, просто добавьте -ifNotExists к команде, которую вы используете для запуска h2.
@joelittlejohn, я попытался добавить -ifNotExists в конфигурацию среды выполнения IntelliJ (в разделе «Аргументы программы»), но, похоже, это не работает. Я делаю что-то неправильно?
@AnonymousAngelo, вы также можете добавить эту конфигурацию в свой application.properties следующим образом: spring.datasource.url=jdbc:h2:mem:testdb;IFEXISTS=false"
@ Anon567, я пробовал это ... единственное, что у меня получилось, - это перейти на более раннюю версию, как упоминает Шон Дашджян выше.
@AnonymousAngelo java -cp h2*.jar org.h2.tools.Server -ifNotExists выполнит эту работу
@shvahabi: пожалуйста, превратите свой комментарий в ответ, вы обязательно получите галочку «правильный ответ». Пожалуйста, также добавьте, что это изменилось где-то между 1.4.197 и 1.4.200, потому что я только что обновился и не мог создать базу данных так, как раньше.
@rychu, поскольку он в значительной степени основан на текущем ответе, я решил не давать новый ответ, а просто отредактировал его и привел пример, чтобы было понятно.
Используйте версию зависимости базы данных H2 до 2019 года, которая автоматически создает базу данных каждый раз, когда вы запускаете автономное приложение. Например версия 1.4.193. Ваш pom.xml должен включать эту зависимость:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
Проблематично, если вы хотите, чтобы функции были доступны в более поздних версиях.
Я согласен с @AlikElzin-kilaka. Это не может быть решением. Я не устанавливаю версию H2, потому что предпочитаю, чтобы она зависела от версии Spring Boot, которую я использую.
пока я использую его для обучения и тестирования, ответ кажется хорошим
Если вы имеете дело с проектом Spring Boot, измените URL-адрес JDBC jdbc:h2:~/test на jdbc:h2:mem:testdb на странице входа, который является URL-адресом по умолчанию, настроенным Spring Boot.
Работал как шарм!
Спасибо, но как мы можем изменить значение URL-адреса JDBC по умолчанию с jdbc:h2:~/test на jdbc:h2:mem:testdb?
@standalone после успешного входа в систему следующий сеанс будет заполнен последним успешным URL-адресом JDBC, который, как я полагаю, заполняется из .h2.server.properties
Это создаст базу данных в памяти, а jdbc:h2:~/test будет базой данных в файловой системе, что сделает ее постоянной.
Ухудшив версию, база данных H2 работает, но таблицу я не вижу. Фрагмент кода
Контроллер
@RestController
public class CurrencyExchangeController {
@Autowired
private Environment env;
@GetMapping("/currency-exchange/from/{from}/to/{to}")
public CurrencyExchange retriveCurrencyExchange(@PathVariable String from,@PathVariable String to)
{
CurrencyExchange currencyExchange = new CurrencyExchange(1000L, from, to, BigDecimal.valueOf(65));
currencyExchange.setPort(Integer.parseInt(env.getProperty("local.server.port")));
return currencyExchange;
}
ПОЖО
@Entity
public class CurrencyExchange {
@Id
private Long id;
@Column(name = "currency_from")
private String from;
@Column(name = "currency_to")
private String to;
@Column(name = "conversion_multiple")
private BigDecimal conversion;
private int port;
Весенний ботинок основной
@SpringBootApplication
@ComponentScan(basePackages = {"com.example"})
public class CurrencyExchangeServiceApplication {
public static void main(String[] args) throws SQLException {
SpringApplication.run(CurrencyExchangeServiceApplication.class, args);
}
app.prop
spring.application.name=currency-exchange-service
server.port=8000
spring.jpa.show-sql=true
spring.h2.console.enabled=true
data.sql file
insert into currency_exchange(id,currency_from,currency_to,conversion_multiple,port)
values(1001,'USD','INR',65,0);
insert into currency_exchange(id,currency_from,currency_to,conversion_multiple,port)
values(1002,'EUR','INR',75,0);
я изменил URL-адрес JDBC на
jdbc:h2:mem:testdb
и это работа
Это должен быть предпочтительный ответ с 2020 года.
@nocdib самый популярный ответ просто говорит то же самое. Так что нет, этот ответ даже не должен существовать, потому что он не добавляет ценности
просто и красиво. Спасибо!
первая ссылка на jdbc:h2:mem:testdb второй изменил версию Spring Boot на 2.1.3 и все работает
Я столкнулся с этой проблемой и решил следующим образом
Чтобы использовать базу данных H2 — ваше приложение должно работать в среде JDK, а не в среде JRE, для изменения выполните следующие действия:
jdbc:h2:~/test, он должен фактически совпадать со свойствами приложения весенней загрузки.
spring.datasource.url=jdbc:h2:mem:testdb поэтому замените URL-адрес в консоли входа и нажмите «Подключиться». Я использовал [Иван Сюэ] [2], предоставленные здесь шаги -> https://stackoverflow.com/a/56539107используйте приведенные ниже свойства в pom.xml и снова запустите приложение.
<?xml version = "1.0" encoding = "UTF-8"?>
<project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.in28minutes.database</groupId>
<artifactId>database-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>database-demo</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
Я столкнулся с этой проблемой недавно, было две проблемы.
test.когда я изменил URL-адрес JDBC на jdbc:h2:mem:{db-name-in-config}, это сработало как шарм.
Проверьте URL-адрес jdbc, используемый в консоли h2, чтобы убедиться, что он соответствует тому, что вы указали.
Добро пожаловать в СО! Когда вы отвечаете на вопросы множеством других ответов, постарайтесь раскрыть свои плюсы.
Я обнаружил, что вы можете добавить параметр к параметрам запуска «-ifNotExists» при загрузке h2 db. Программно можно сделать так:
Server.createTcpServer("-tcpPort", "[ПОРТ]", "-tcpAllowOthers", "-ifNotExists").start();
Если вы используете командную строку, то же самое
Along with h2 dependency in POM :
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
Я добавил jpa, зависимость репозитория crud в POM, как показано ниже, и у меня это сработало нормально:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
Это не ответ на вопрос.
Просто добавьте это в файл приложение.свойства:
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
После работы и неудач с внешним интерфейсом (консолью) и другими настройками зависимостей это, наконец, сработало!
Проблема:
Database not found or test folder not in c:/user/username/test
Скопируйте и вставьте его в файл application.properties:
spring.datasource.url=jdbc:h2:~/test
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
Проблема была с URL, проверьте. Задача решена.
В дополнение к ответу @Prateik Upadhyay, если вы хотите переименовать свое имя подключения к базе данных во что-то другое, единственное, что сработало для меня, приведено ниже. Я использую версию весенней загрузки 2.2.4. с версией h2 1.4.200.
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:h2:~/MyComponentDB;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1;MODE=Oracle
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.h2.console.enabled=true
введите описание изображения здесь
Зависимость от Maven
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
</dependencies>
MacOS Каталина 10.15.4 Работал!
I also got this Error. You have to Configured
*application.properties*
# temporary data storage
spring.datasource.url = jdbc:h2:file:C:/data/test (Windows only)
spring.h2.console.path=/h2
server.port=8181
You have to create Folder in C: Drive data/test
Go To Browser:
http://localhost:8181/h2
Then URL:
jdbc:h2:file:C:/data/test
You Can See in this pic also: [1]
[1]: https://i.stack.imgur.com/ExFNR.png
You can see youtube Video
https://thewikihow.com/video_yYWPuM8k8K4
Здесь вопрос в том, как включить создание базы данных, когда база данных не существует по заданному пути. запуск по умолчанию базы данных h2 включит условие ifexists=true.
чтобы избежать этого сценария, необходимо запустить базу данных h2 из терминала со следующей опцией. java -cp h2-1.4.199.jar org.h2.tools.Server -ifNotExists
как только вы дадите этот вариант. можно ли создать базу данных с URL-адресом Много раз я хочу создать файл базы данных в определенной папке. как только вы запустите сервер с флагом -ifNotExists, вы можете использовать приведенный ниже синтаксис для создания папки базы данных по вашему выбору. jdbc:h2:tcp://localhost/D:/Working/Sri/Technology/h2/data/books здесь books — это имя базы данных. если не существует, он создаст базу данных книг в данной папке.
Когда мы пытаемся из консоли H2DB, мы не видим фактическую ошибку полностью.
##В консоли показывает:##
>Database "mem:testdb" not found, either pre-create it or allow remote database creation
>(not recommended in secure environments) [90149-200] 90149/90149
Однако, когда мы выполняем команду для открытия H2 Console
> java -cp h2-1.4.200.jar org.h2.tools.Server -ifNotExists
##Он показал мне реальную ошибку, какой порт уже используется#
The Web Console server could not be started. Possible cause: another server is already >running at http://191.167.0.7:8082 Exception in thread "main" org.h2.jdbc.JdbcSQLNonTransientConnectionException: Exception >opening port "8082" (port may be in use), cause: "java.net.BindException: Address already >in use: bind" [90061-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:622) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429)
##Решение: завершите процесс, работающий на порту. Так что этот порт доступен для H2##> Найдите pid, используемый для порта
>>D:\H2\bin>netstat -ano | findstr :8082
>> TCP [::]:8082 [::]:0 LISTENING 6376
> Убить ПИД
>>D:\H2\bin>taskkill /PID 6376 /F
>>SUCCESS: The process with PID 6376 has been terminated.
> Запустите консоль H2 сейчас
>java -cp h2-1.4.200.jar org.h2.tools.Server -ifNotExists
Проблема Это сработало для меня :). Я чувствую, что Исключение, отображаемое на консоли, должно быть более четким, чтобы показать порт..
Спасибо
Пожалуйста, не используйте жирный шрифт во всех предложениях.
проблема не в URL-адресе или чем-то еще, ниже приведено правило, которое мы должны использовать в этом случае, –
Я получил ту же ошибку, когда впервые попытался открыть консоль H2. Лучший способ - изменить URL-адрес JDBC и заменить его значением, которое присутствует в терминале, строка, в которой говорится -> (Консоль H2 доступна в «/ h2-console». База данных доступна в «JDBC URL») Это правильный способ сделать
Убедитесь, что в вашем проекте также есть Spring Boot Data JPA.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
В последних версиях базы данных H2 следующий снимок экрана может помочь вам войти в экран базы данных H2. Находясь в консоли запуска приложения, мы можем найти URL-ссылку JDBC, которая необходима для запуска консоли базы данных H2 в браузере.
Итак, что должен сделать автор ответа, чтобы решить свою проблему...
Попробуйте предыдущую версию 1.4.198. У меня также были проблемы после обновления с [1.4.188] до [1.4.199], но [1.4.198] у меня работает нормально.