最近我在我的iPhone应用程序中实现了一个使用SQLite的缓存组件。 我正在用任何包装器框架本地编写和读取数据。 问题是,在使用应用程序一段时间后,它开始获取SQLITE_CORRUPT状态代码以响应我在数据库中执行的任何SQL语句。
我正在使用SQLiteManager作为我的DB mgmt工具。当数据库损坏时,我试图通过SQLiteManager进行分析和检查,但它甚至不允许我浏览表中的数据,只输出一条说明数据已损坏的简洁消息。
任何人都可以协助这个吗?首先 - 数据库如何处理这种情况,第二种 - 无论如何或在哪里可以看到数据?
谢谢, 盖
答案 0 :(得分:1)
您可以参考此official documentation。他们在这里提到db很少有机会被破坏。
他们还列出了chances DB如何被破坏。并从那里参考以下示例,可以导致问题到db。
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;
在上面的示例中,UPDATE的第一个循环导致触发器触发并删除ex1表的第二行。当UPDATE循环的第二个循环运行时,它会尝试处理ex1表的第二行。 SQLite认识到第二行已被删除,因此它会中止第二个循环,但它无法正常清理,这可能导致循环的后续循环中的数据库损坏。
所以,基本上你需要找出你的代码中发生这种情况的情况,通过调试或通过你的应用程序或任何其他机制的步骤。