我有一个H2数据库的URL“jdbc: H2:test”。我使用create table PERSON (ID INT主键,名字VARCHAR(64),姓VARCHAR(64));;然后使用select * from PERSON从这个(空)表中选择所有内容。到目前为止,一切顺利。

然而,如果我将URL更改为“jdbc:h2:mem:test”,唯一的区别是数据库现在只在内存中,这给了我一个org.h2.jdbc。JdbcSQLException:表“PERSON”未找到;SQL语句:SELECT * FROM PERSON[42102-154]。我可能错过了一些简单的东西,但任何帮助将不胜感激。


当前回答

我来这个职位是因为我也犯了同样的错误。

在我的例子中,数据库演化没有被执行,所以表根本就不存在。

我的问题是进化脚本的文件夹结构是错误的。

来自:https://www.playframework.com/documentation/2.0/Evolutions

Play使用多个演进脚本跟踪数据库演进。这些脚本是用普通的SQL编写的,应该位于应用程序的conf/evolution /{数据库名}目录中。如果演进应用于默认数据库,则该路径为conf/evolutions/default。

我在eclipse中创建了一个名为conf/evolution .default的文件夹。在我将文件夹结构修正为conf/evolution /default后,这个问题消失了

其他回答

在添加Spring Data JPA依赖项后,我发现它可以正常工作

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>

在应用程序中添加H2 DB配置。yml:

spring:
  datasource:
    driverClassName: org.h2.Driver
    initialization-mode: always
    username: sa
    password: ''
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
  h2:
    console:
      enabled: true
      path: /h2
  jpa:
    database-platform: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: none

也有类似的问题 解决方案是向application.properties添加以下内容

spring.jpa.defer-datasource-initialization=true

我试图获取表元数据,但有以下错误:

使用:

String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1";

DatabaseMetaData metaData = connection.getMetaData();
...
metaData.getColumns(...);

返回一个空的ResultSet。

但是使用下面的URL可以正常工作:

String JDBC_URL = "jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DATABASE_TO_UPPER=false";

需要指定:DATABASE_TO_UPPER=false

我也遇到了同样的问题,并在应用程序测试中更改了配置。属性:

#Test Properties
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=create-drop

和我的依赖:

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <!-- https://mvnrepository.com/artifact/com.h2database/h2 -->
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.198</version>
        <scope>test</scope>
    </dependency>

以及测试类上使用的注释:

@RunWith(SpringRunner.class)
@DataJpaTest
@ActiveProfiles("test")
public class CommentServicesIntegrationTests {
...
}

我可能有点晚了,但我遇到了完全相同的错误,我尝试了这里提到的每个解决方案和其他网站,如DATABASE_TO_UPPER=false;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT = FALSE;IGNORECASE = TRUE

但对我来说什么都不管用。 对我有用的是重命名数据。导入。SQL

我在这里找到的——https://stackoverflow.com/a/53179547/8219358

Or

对于Spring Boot 2.4+,在应用程序中使用Spring .jpa.defer-datasource-initialization=true。属性(此处提到- https://stackoverflow.com/a/68086707/8219358)

我意识到其他解决方案更合乎逻辑,但没有一个对我有效,而这个却管用。