【发布时间】:2012-02-26 16:01:01
【问题描述】:
我有一个项目,我应该使用多个表来避免在我的 sqlite 文件中保留重复的数据(即使我知道使用多个表是一场噩梦)。
在我的应用程序中,我正在以某种方法从一个表中读取数据,并以某种其他方法将数据插入到另一个表中。当我这样做时,我从 sqlite 步进函数中得到错误代码 21,这是 sqlite 滥用。
根据我的研究,这是因为我无法从多线程访问表。
到目前为止,我阅读了 sqlite 网站,了解到配置 sqlite 数据库有 3 种模式:
1) 单线程:你没有机会调用多个线程。
2)多线程:是的多线程;但有一些障碍。
3) 序列化:这是与多线程数据库应用的最佳匹配。
如果sqlite3_threadsafe() == 2 返回 true,那么是的,您的 sqlite 数据库已序列化并且返回 true,所以我为自己证明了这一点。
然后我有一个代码来配置我的 sqlite 数据库以进行序列化以保证它。
sqlite3_config(SQLITE_CONFIG_SERIALIZED);
当我在类中使用上述代码时,我从 1 个表中读取和插入数据时效果很好:)。但是如果我尝试在课堂上使用它,我从 2 个表中读取和插入数据(实际上是我真正需要它的地方),就会出现 sqlite 滥用问题。
我检查了我打开和关闭数据库的代码,它们没有问题。除非我删除另一个,否则它们会起作用。
我正在使用 ios5,这对我的项目来说确实是一个大问题。我听说instagram 使用postgresql 可能是这个原因哈?一开始你会建议 postgresql 还是 sqlite?
【问题讨论】:
标签: multithreading sqlite misuse