我有一个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]。我可能错过了一些简单的东西,但任何帮助将不胜感激。
我也遇到了同样的问题,并在应用程序测试中更改了配置。属性:
#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 {
...
}
我已经试着补充了
jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
然而,这并没有帮助。在H2网站上,我发现以下,这确实可以在某些情况下有所帮助。
默认情况下,关闭到数据库的最后一个连接将关闭数据库。对于内存中的数据库,这意味着内容丢失。要保持数据库打开,在数据库URL中添加;DB_CLOSE_DELAY=-1。要在虚拟机处于活动状态时保持内存中数据库的内容,请使用jdbc:h2:mem:test;DB_CLOSE_DELAY=-1。
然而,我的问题是模式应该与默认模式不同。所以不用
JDBC URL: jdbc:h2:mem:test
我不得不使用:
JDBC URL: jdbc:h2:mem:testdb
然后桌子就可见了