无法浏览H2数据库文件?

无法浏览H2数据库文件?,h2,dbvisualizer,H2,Dbvisualizer,我正在单元测试中创建一个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:targe

我正在单元测试中创建一个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.h2
jar文件的1.3.166版

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

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

我还尝试了H2控制台,但是
showtables
命令返回一个空结果集

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


有什么建议吗?

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

jdbc:h2:file:target/db/testdb
这意味着数据库文件是相对于当前工作目录存储的。因此,这取决于您从何处启动应用程序。如果您在不同的目录中启动了DBVisualizer(很可能是这样),那么它将在不同的目录中创建一个新的数据库

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

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

前缀
文件:
是可选的。

如果出现如下错误

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浏览数据库,可以创建新的数据库驱动程序:

工具
驱动程序管理器…
创建新驱动程序


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

实际上,问题在于我如何在DBVisualizer中指定该文件。它请求一个数据库文件,并打开一个文件选择器对话框,我自然地双击了
target/db/testdb.h2.db
文件。但是正确的方法是删除
.h2.db
扩展名。糟糕的用户界面设计。我想在下一个版本的H2(可能是2.0)中将不会有硬编码的文件名后缀。@JohnQCitizen你赢了我一周的所有互联网!这就是问题所在。我当时正在使用数据库迁移,不明白为什么没有创建表。事实证明,删除.h2.db就成功了。使用ui失败!谢谢你的解决方案!