最近,我在我的iPhone应用程序中实现了一个使用SQLite的缓存组件。我本机编写和读取数据--任何包装器框架。问题是,在使用该应用程序一段时间之后,它开始获得SQLITE_CORRUPT状态代码,以响应我在DB中执行的任何SQL语句。
我使用SQLiteManager作为我的DB mgmt工具。当数据库损坏时,我试图通过SQLiteManager进行分析和检查,但它甚至不允许我浏览表中的数据,只输出一条简短的消息,其中说数据已损坏。
有人能帮上忙吗?首先,数据库是如何到达这种情况的?第二,我如何或者在哪里看到这些数据?
谢谢,盖伊。
发布于 2011-05-18 13:32:14
您可以参考这个正式文件。在这里,他们提到了数据库被破坏的机会非常少。
他们还列出了数据库如何被破坏的机会。然后,请参考下面的示例,该示例可能会导致数据库出现问题。
CREATE TABLE ex1(a INTEGER PRIMARY KEY, b);
INSERT INTO ex1 VALUES(1,2);
INSERT INTO ex1 VALUES(2,3);
CREATE TRIGGER ex1_tr1 AFTER UPDATE ON ex1 BEGIN
DELETE FROM ex1 WHERE a=old.b;
END;
UPDATE ex1 SET b=b+1;在上面的示例中,更新的第一个周期会触发触发器并删除ex1表的第二行。当UPDATE循环的第二个周期运行时,它尝试处理ex1表的第二行。SQLite认识到第二行已被删除,因此它中止了第二个循环,但它本身未能正确清理,这可能导致后续循环中的数据库损坏。
因此,基本上,您需要通过调试或通过应用程序或任何其他机制执行以下步骤来了解代码中发生这种情况的情况。
https://stackoverflow.com/questions/6045283
复制相似问题