【问题标题】:i can't connect to the H2 database我无法连接到 H2 数据库
【发布时间】: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);
  }

【问题讨论】:

    标签: java h2


    【解决方案1】:

    您已经知道如何从 in-memory 数据库切换到基于文件的存储。

    尝试早点设置断点。也许在测试结束时有一些清理会删除所有表?或者也许有一个tearDown 方法进行清理?

    另一个想法:在你的测试中间写一个backup

    connection.createStatement().execute("BACKUP TO '<desired-location>/backup.zip';");
    

    【讨论】:

    • 我已经尝试在一开始就设置断点,并逐步完成整个测试。它没有帮助。
    • 但是在哪里插入呢?我只是在学习 Spring + Hibernate。我不太了解这项技术。我从项目中添加了一个测试方法。
    • 与您尝试断点的地方相同,直到您找到数据库包含内容的地方。
    • 我不明白connection.createStatement()方法是什么。我怎么称呼它?
    猜你喜欢
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    相关资源
    最近更新 更多