无法浏览H2数据库文件?

Joh*_*zen 5 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:target/db/testdb"/>
  <property name="username" value="sa"/>
  <property name="password" value=""/>
</bean>
Run Code Online (Sandbox Code Playgroud)

我正在使用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命令返回一个空的结果集.

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

有什么建议?

Tho*_*ler 6

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

jdbc:h2:file:target/db/testdb
Run Code Online (Sandbox Code Playgroud)

这意味着数据库文件相对于当前工作目录存储.所以它取决于你启动应用程序的位置.如果你在另一个目录中启动了DBVisualizer(很可能你就是这样做了),那么它就是在另一个目录中创建一个数据库.

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

jdbc:h2:~/relative/to/user/home/dir/testdb
jdbc:h2:/absolute/path/testdb
Run Code Online (Sandbox Code Playgroud)

前缀file:是可选的.

  • 实际上问题是我在DBVisualizer中指定文件的方式.它要求一个数据库文件,并打开一个文件选择器对话框,我自然会双击`target/db/testdb.h2.db`文件.但正确的方法是删除`.h2.db`扩展名.糟糕的UI设计恕我直言. (6认同)