我无法连接到 H2 数据库
Posted
技术标签:
【中文标题】我无法连接到 H2 数据库【英文标题】:i can't connect to the H2 database 【发布时间】:2021-03-26 01:02:46 【问题描述】:我正在研究一个关于使用数据库的培训项目。主库是mysql,测试用的是H2,这里有教程:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>test</scope>
</dependency>
application.properties 文件中指定了以下设置:
jdbc:
driverClassName: org.h2.Driver
pool.size.max: 10
statement.timeout: 0
url: jdbc:h2:mem:mytestdb;DB_CLOSE_ON_EXIT=FALSE
username: sa
password:
测试通过,即数据输入数据库,检查,一切OK。
但是当我在调试模式下运行测试时,在测试结束时下一个断点并尝试连接数据库,它是空的,甚至没有表,更不用说数据了。要连接,我使用 Dbever。在连接字符串中,我写了 jdbc:h2:mem:mytestdb;DB_CLOSE_ON_EXIT=FALSE (我试过 jdbc:h2:tcp://localhost:9092/mem:mytestdb)。检查连接通过,写道一切正常,连接建立。可能是什么问题?
我尝试写入文件,而不是 url:jdbc:h2:mem:ump-currencymanager; DB_CLOSE_ON_EXIT=FALSE 我写了: url: jdbc:h2:file:c:\logs\logdb 这个文件是我用Dbever打开的时候创建的,连表都在那里,但是表本身没有数据。
研究了有关此主题的类似问题。
@Test
public void createPeopleTable() throws SQLException
int count = peopleService.count();
assertEquals(0, count);
peopleService.createPeopleTable();
count = peopleService.count();
assertEquals(34, count);
【问题讨论】:
【参考方案1】:您已经知道如何从 in-memory 数据库切换到基于文件的存储。
尝试早点设置断点。也许在测试结束时有一些清理会删除所有表?或者也许有一个tearDown 方法进行清理?
另一个想法:在你的测试中间写一个backup:
connection.createStatement().execute("BACKUP TO '<desired-location>/backup.zip';");
【讨论】:
我已经尝试在一开始就设置断点,并逐步完成整个测试。它没有帮助。 但是在哪里插入呢?我只是在学习 Spring + Hibernate。我不太了解这项技术。我从项目中添加了一个测试方法。 与您尝试断点的地方相同,直到您找到数据库包含内容的地方。 我不明白connection.createStatement()方法是什么。我怎么称呼它? 或许可以看看这里:docs.oracle.com/javase/tutorial/jdbc/basics/index.html以上是关于我无法连接到 H2 数据库的主要内容,如果未能解决你的问题,请参考以下文章