【问题标题】:Cannot browse a H2 database file?无法浏览 H2 数据库文件?
【发布时间】:2013-04-17 10:52:05
【问题描述】:

我正在单元测试中创建一个 H2 数据库。该数据库使用以下属性:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close">
  <property name="driverClassName" value="org.h2.Driver"/>
  <property name="url" value="jdbc:h2:file:target/db/testdb"/>
  <property name="username" value="sa"/>
  <property name="password" value=""/>
</bean>

我使用的是 1.3.166 版的 com.h2database.h2 jar 文件。

当我运行测试时,我看到在target/db 目录中创建了数据库,并且存在一个testdb.h2.db 文件。我的测试运行并从数据库加载数据。我可以打开 target/db/testdb.h2.db 文件并查看我用于创建数据库的 SQL 语句。

但是,当我尝试将 target/db/testsb.h2.db 文件加载到 DBVisualizer 等数据库浏览工具中时,我看不到任何表格或数据。对于 DBVisualizer,我指定 H2(嵌入式)模式。

我也尝试了 H2 控制台,但 show tables 命令返回一个空结果集。

我看不出我做错了什么:数据库文件存在,测试正确运行,但我无法在数据库浏览器中打开此文件。

有什么建议吗?

【问题讨论】:

    标签: h2 dbvisualizer


    【解决方案1】:

    很可能,问题出在您使用的数据库 URL 上。

    jdbc:h2:file:target/db/testdb
    

    这意味着数据库文件的存储相对于当前工作目录。所以这取决于你从哪里开始应用程序。如果您在不同的目录中启动 DBVisualizer(很可能您已经这样做了),那么它会在不同的目录中创建一个 new 数据库。

    为确保您使用的是同一个数据库,我建议使用绝对目录名称,或相对于当前用户主目录,如 H2 文档中所述:

    jdbc:h2:~/relative/to/user/home/dir/testdb
    jdbc:h2:/absolute/path/testdb
    

    前缀file: 是可选的。

    【讨论】:

    • 实际上问题是我如何在 DBVisualizer 中指定文件。它要求提供一个数据库文件,然后打开一个文件选择器对话框,我自然而然地双击了target/db/testdb.h2.db 文件。但是正确的方法是去掉.h2.db这个扩展。糟糕的 UI 设计恕我直言。
    • 我认为在 H2 的下一个市长版本(可能是 2.0)中不会有硬编码的文件名后缀。
    • @JohnQCitizen 你赢得了我一周的互联网!这就是问题所在。我正在使用数据库迁移,但无法弄清楚为什么没有创建表。事实证明,删除 .h2.db 就可以了。使用 ui 失败!并感谢您的解决方案!
    【解决方案2】:

    如果您收到类似的错误

    Unsupported database file version or invalid file header in file "Old database:
    /path/to/databasename.data.db - please convert the database to a SQL script and 
    re-create it." [90048-167]
    

    问题是(如消息所述)您正在使用使用旧版本的 h2 创建的数据库。为了使用 dbVisualizer 浏览数据库,您可以创建一个新的数据库驱动程序:

    Tools > Driver manager... > Create a new driver

    填写字段并选择正确的 h2 jar 文件,您应该可以开始了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-12
      • 2012-10-19
      • 2023-04-04
      • 2021-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多