2014-11-24 4903 views
9

我用自己的程序创建了数据库,它显示为mydatabase.mv.db文件。如何访问H2数据库的* .mv.db文件?

但是,当我试图访问与DbVisualizer相同的数据库,显然相同的参数,它创建了两个文件mydatabase.lock.dbcelebrity.h2.db,并没有看到在程序中创建的表。

什么是不兼容?

UPDATE

两种设置是如下:

enter image description here

enter image description here

+0

什么是您的程序和'DbVisualizer'使用的连接细节? – MadProgrammer 2014-11-24 00:53:08

+0

尝试并确保路径使用'/'而不是'''(在'DbVisualizer'中) – MadProgrammer 2014-11-24 01:00:37

+0

为方便起见,追加'; IFEXISTS = TRUE'以避免创建虚假的数据库文件,正如建议的[here](http:/ /stackoverflow.com/a/2443685/230513)。 – trashgod 2014-11-25 10:33:58

回答

15

在H2 1.3.x版,数据库文件<databaseName>.h2.db是默认的。 (使用存储引擎“PageStore”)。

在H2版本1.4.x中,数据库文件<databaseName>.mv.db是默认值。 (使用存储引擎“MVStore”)。 MVStore现在仍在测试阶段(2014年11月)。但是,您可以通过将;mv_store=false附加到数据库URL来禁用MVStore。

+0

我可以确认'1.4.190'版本的h2将创建一个' .h2.db'而不是' .mv.db'(甚至我设置了'MVCC = TRUE; MULTI_THREADED = TRUE' jdbc网址)。我必须做的是设置'MC_STORE = TRUE'来强制h2使用' .mv.db'文件。 – bob 2015-12-03 09:42:47

+0

我认为你使用的是旧版本1.4.190,或者数据库已经存在。你可以通过运行'select * from information_schema.settings'来检查'%BUILD%'的名字吗?在版本1.4.190中,结果('CREATE_BUILD'是用于创建数据库的版本,'info.BUILD_ID'是当前版本)会得到'190'两倍。顺便说它是'MV_STORE'而不是'MC_STORE'。 – 2015-12-04 08:22:47

+0

对不起,我发现它是由之前创建的数据库引起的(没有MVCC = TRUE)。如果' .h2.db'存在,看起来h2将重新使用旧的,而创建一个名为' .mv.db'的新的。 – bob 2015-12-05 08:39:16

2

接受的答案是几年来老,因为其他人可能会寻找一个更“当前”的解决方案...

得到它只是工作更新DBVizualizer使用H2 JDBC驱动程序。基本上从http://www.h2database.com/html/download.html下载“Platform-Independent Zip”,然后将h2/bin/h2-X.X.X.jar文件复制到~/.dbvis/jdbc/,然后重新启动DBVizualizer,以便它可以获取更新的驱动程序。

此外,在DBVizualizer中设置数据库文件名时,请确保从文件名中删除.mv.db