我是否可以故意损坏 sqlite3 数据库进行测试



我在Android手机上运行一个小而关键的应用程序。 它使用 sqlite 数据库作为其主数据存储。 经过一年多近乎完美的运行,由于臭名昭著的"数据库磁盘映像格式不正确"问题,它在几天前的临界点突然崩溃。 这引起了一些尴尬,因为我在几个小时内无法访问系统来修复它。

我知道这种情况应该非常罕见。 但是我现在正在编写一些代码以更优雅地从这种情况中恢复,因为我无法承受再次发生这种情况(这可能是由于手机的硬件,在这种情况下,它现在可能会开始更频繁地发生 - 但再次我无法承受崩溃甚至再次崩溃)。

但是,要测试我的恢复代码,我需要生成相同的错误,并且由于一个愚蠢的错误,我丢失了造成问题的数据库的副本。

我的问题是 - 我可以对 sqlite 数据库做些什么会导致"数据库磁盘映像格式不正确"错误? 然后,我可以测试我的恢复代码。

SQLite 文档有一篇名为"如何损坏 SQLite 数据库文件"的文章

SQLite数据库文件是普通磁盘文件。这意味着任何 进程可以打开文件并用垃圾覆盖它。有 SQLite 库无法对此进行任何防御。

如果你把垃圾数据写到文件中,我想你可以实现你想要的

你可以做到。

  1. 只需将工作数据库文件复制到资产中即可。
  2. 然后,一旦应用程序运行,通过代码字节逐字节复制数据库文件,并在复制时丢弃一些字节,您将获得损坏的数据库。

您也可以尝试其他方法:

只需创建一个文本文件。 然后将其重命名为 *.db 文件,并尝试在 android 中打开该文件,假设它是一个数据库文件。我希望你会得到同样的例外。

最新更新