iphone中的SQLITE_CORRUPT问题

时间:2011-05-18 13:14:46

标签: iphone sqlite

最近我在我的iPhone应用程序中实现了一个使用SQLite的缓存组件。 我正在用任何包装器框架本地编写和读取数据。 问题是,在使用应用程序一段时间后,它开始获取SQLITE_CORRUPT状态代码以响应我在数据库中执行的任何SQL语句。

我正在使用SQLiteManager作为我的DB mgmt工具。当数据库损坏时,我试图通过SQLiteManager进行分析和检查,但它甚至不允许我浏览表中的数据,只输出一条说明数据已损坏的简洁消息。

任何人都可以协助这个吗?首先 - 数据库如何处理这种情况,第二种 - 无论如何或在哪里可以看到数据?

谢谢, 盖

1 个答案:

答案 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认识到第二行已被删除,因此它会中止第二个循环,但它无法正常清理,这可能导致循环的后续循环中的数据库损坏。

所以,基本上你需要找出你的代码中发生这种情况的情况,通过调试或通过你的应用程序或任何其他机制的步骤。