有没有一种方法可以在应用程序启动H2数据库之前检查数据库损坏?如果我发现数据已损坏,我想在应用程序启动时从备份zip文件运行自动还原。

我不能仅通过连接数据库来检查它,因为即使DB文件存在,即使该文件为空,我仍然可以连接并生成默认表。

我还考虑对数据库中的每个表做出一个select语句,以确保其正常工作。我没有在H2数据库中找到任何内置的sql函数来检查数据损坏。

最佳答案

要检查数据库文件是否存在,可以使用

if (new java.io.File(databaseFileName).exists()) { ... }


如果文件存在,但是数据库已损坏,则通常将无法连接到该文件(尝试连接将引发异常)。我知道这是最快的验证方法。

数据库文件存在但未完全初始化的风险很小。如果真是这样,那么某些表不存在。验证所有表是否存在的标准方法是使用DatabaseMetaData.getTables

但是,除非您使用某些危险的功能(例如禁用事务日志或禁用数据库文件锁定),否则如果使用最新版本的H2,数据库不会损坏。如果数据库确实损坏,那么这可能是您如何使用H2的问题,或者可能是H2本身的错误。将包含详细信息的邮件发送给H2 Google网上论坛可能是有意义的。

09-07 15:12
查看更多