有没有办法在应用程序启动 H2 数据库之前检查数据库损坏?如果我发现数据已损坏,我想在应用程序启动时从备份 zip 文件运行自动恢复。
我不能仅仅通过连接到数据库来检查它,因为如果数据库文件在那里,即使它是空的,我仍然可以连接并生成默认表。
我还想为数据库中的每个表创建一个选择语句以确保其正常工作。我没有在 H2 数据库中找到任何内置的 sql 函数来检查数据损坏。
要检查数据库文件是否存在,您可以使用
if (new java.io.File(databaseFileName).exists()) { ... }
如果文件存在,但数据库已损坏,那么通常您将无法连接到它(尝试连接将引发异常)。这是我知道的最快的验证方式。
存在数据库文件存在但未完全初始化的小风险。如果是这种情况,则某些表不存在。验证所有表是否存在的标准方法是使用DatabaseMetaData.getTables
.
但是,除非您使用一些危险的功能(例如禁用事务日志或禁用数据库文件锁定),否则如果您使用 H2 的最新版本,数据库不应该损坏。如果数据库确实损坏了,那么这可能是您如何使用 H2 的问题,或者可能是 H2 本身的错误。向 H2 Google Group 发送包含详细信息的邮件可能是有意义的。