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