5

我正在我的单元测试中创建一个 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>

我正在使用com.h2database.h2jar 文件的 1.3.166 版本。

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

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

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

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

有什么建议么?

4

2 回答 2

6

最有可能的问题是您使用的数据库 URL。

jdbc:h2:file:target/db/testdb

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

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

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

前缀file:是可选的。

于 2013-04-20T15:11:50.387 回答
0

如果您收到类似的错误

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 文件,你应该很高兴。

于 2013-09-12T14:45:02.987 回答