我无法连接到 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 数据库的主要内容,如果未能解决你的问题,请参考以下文章

我无法连接到 H2 数据库

无法连接到元数据库 h2 数据库

无法在自动混合模式下连接到 H2 数据库

R中的H2O错误-无法连接到本地主机

数据库连接错误(3):无法连接到数据库',

无法找到或加载主类 org.h2.tools.Console