找不到数据库,并且 IFEXISTS=true,所以我们不能自动创建它

打开 h2 数据库控制台后出现错误。我输入数据库名称,但显示找不到数据库错误:

找不到数据库“C:/Users/Barlekar/onlineshoppings”,并且 IFEXISTS=true,所以我们无法自动创建它 [90146-199] 90146/90146(帮助)

org.h2.jdbc.JdbcSQLNonTransientConnectionException:找不到数据库“C:/Users/Barlekar/onlineshoppings”,并且 IFEXISTS=true,因此我们无法自动创建它 [90146-199]

stack overflow Database not found, and IFEXISTS=true, so we cant auto-create it
原文答案

答案:

作者头像

如果你是在处理 Spring Boot 项目,请在登录页面将 JDBC URL jdbc:h2:~/test 更改为 jdbc:h2:mem:testdb ,这是 Spring Boot 配置的默认 URL。

作者头像

使用 2019 之前版本的 H2 数据库依赖项,每次运行独立应用程序时都会自动创建数据库。例如版本 1.4.193 。你的 pom.xml 应该包含这个依赖:

<dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.193</version>
</dependency>
作者头像

你最近升级了H2吗?这可能是原因。

这与以下 H2 提交有关:

https://github.com/h2database/h2database/commit/8b53f3999c6c5c3d5ca29020e2657968f4f59ec4

并且由于此漏洞而进行了更改:

https://www.exploit-db.com/exploits/45506

这意味着 H2 现在的默认设置是在独立网络模式下运行时自动创建数据库。

如果您已经阅读并理解了上述内容,并且仍然希望允许自动创建数据库,那么只需将 -ifNotExists 标志添加到您的 h2 start 命令中,如下所示:

java -cp h2*.jar org.h2.tools.Server -ifNotExists
作者头像

只需将其附加到 application.properties 文件:

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
作者头像

我将 JDBC URL 更改为

jdbc:h2:mem:testdb

这是工作

作者头像

问题:

未找到数据库或测试文件夹不在 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,检查它。问题解决了。

作者头像

enter image description here

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 Catalina 10.15.4 工作!

作者头像

我发现你可以在启动 h2 db 时向“-ifNotExists”启动选项添加一个参数。以编程方式,您可以这样做:

Server.createTcpServer("-tcpPort", "[PORT]", "-tcpAllowOthers", "-ifNotExists").start();

如果您使用的是命令提示符,则同样适用

作者头像
Along with h2 dependency in POM :
<dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
    </dependency>

我在 POM 中添加了 jpa、crud 存储库依赖项,如下所示,对我来说效果很好:

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
作者头像

the problem is not with the url or anything, below is the rule that we have to use in this case, –

  1. For In-memory database:please replace the URL at H2 Console as jdbc:h2:mem:testdb
  2. For on Disk database: use the jdbc:h2:~/testdb