嵌入式h2数据库:获取连接但找不到表

时间:2014-06-02 06:50:32

标签: sql database h2

我正在使用h2嵌入式数据库。当我启动我的应用程序时,db被初始化,我能够获得连接对象。但是,当应用程序尝试在表中插入数据时,它会抛出sql异常'table XXXX not found'。

我可以从H2控制台查看表格。同样的查询在控制台上运行完美。

通过关于这个主题的另一个问题的一些答案,我已经理解当数据库为空时会发生这种行为。但是从H2控制台我能够查看和执行查询,我已经交叉检查它是相同的数据库,因为我使用完全相同的URL和用户通过应用程序和H2控制台连接。

有什么建议可以解决吗?

2 个答案:

答案 0 :(得分:4)

所有特权都已到位。所以有一件事是肯定我确实指向了错误的数据库。但我怎么不知道。然后我注意到,当我第一次启动应用程序服务器时,创建的db文件扩展名为mv.db.当我第一次通过h2控制台连接时,创建了一个扩展名为h2.db的文件。 确实为同一个用户和网址创建了两个不同的数据库。

原因是我的应用程序中存在的h2驱动程序jar是版本1.4(beta),它创建了扩展名为mv.db的db。我访问的控制台是通过h2版本1.3(最后一个稳定版)创建的h2.db文件。

此问题是由于应用程序和控制台之间的版本不匹配造成的。一旦我将两者都移到1.4(测试版),问题就解决了。

答案 1 :(得分:1)

我的错误是在两个不同的数据库上工作。 H2由两个数据库组成,一个只有一个内存(jdbc:h2:mem / ...),另一个是持久性的(jdbc:h2:〜/...)。

此外,内存数据库似乎依赖于会话。这意味着如果您使用一个工具连接并创建表,那么您将无法在服务器上找到此表。