H2数据库无法在mv.db文件中找到表 - 但会覆盖现有的

时间:2017-06-29 21:27:02

标签: java h2

使用javax.sql.DataSource管理H2数据库,该数据库使用连接字符串保存到名为mydb.mv.db的文件中,如下所示:

jdbc:h2:mydb;DATABASE_TO_UPPER=false;MODE=MySQL;

此外,我们已使用以下连接字符串进行测试:

jdbc:h2:mydb;DATABASE_TO_UPPER=false;MODE=MySQL;INIT=create table if not exists mytable(...);

mv.db文件已经包含一个包含大约600k数据的表。数据包括普通的东西(int和varchars)以及longblob字段。我的发行版包含自己的JRE7包。

我们已经部署到运行Windows7的多个客户。一切都按预期为每个人工作 - 除了一个。对于该客户,该表未找到,并且没有这样的表"错误被抛出。如果我们包含"创建表,如果不存在"在连接字符串INIT中,然后重新创建表并且文件大小缩小到12k(这看起来很可疑 - 就像文件被完全忽略并简单地用空白数据库覆盖一样)。

什么可能导致这个在某些系统上运行而在其他系统上运行失败(所有Win 7/64位)?

有关进一步的背景,以下是我们考虑和排除的一些可能原因:

  • 文件路径混乱?当我们使用包含INIT语句的连接字符串时,将重新创建表,并且文件大小会显着缩小。所以它似乎找到了正确的文件。此外,当我们随后将数据保存到此表时,在重新创建数据后,它仍然存在
  • 文件权限不足?在问题环境中,我们手动将权限设置为Everyone的完全控制权并且问题仍然存在。相反,在我们的测试环境中,我们将mydb.mv.db设置为只读,并且不会出现问题。
  • 区分大小写?在config
  • 中尝试了DATABASE_TO_UPPER = false
  • 不同的架构?没有解释文件大小如何缩小(这表明预先存在的表正在被替换)

0 个答案:

没有答案