Objective c 如何在不同的线程中正确处理sqlite查询?
我正在开发一个使用sqlite数据库的iPhone应用程序。应用程序在后台线程中从互联网下载数据,UI位于主线程中。后台下载线程可以在数据库上执行插入、更新和选择。UI层还可以通过执行更新和选择来与数据库交互。如果在后台线程下载时我没有与UI进行大量交互,那么一切都可以正常工作。但是,在下载过程中,当主UI线程上执行大量更新时,我开始遇到问题 在对数据库的每个查询中,我都使用@synchronized语句,但这并不能解决问题。当来自UI的查询和来自反向线程的查询同时执行时,会导致数据丢失。如果主线程中的数据是分开执行的,那么在主线程中更新数据的性能也和在回溯中一样好 数据库的sqlite3_threadsafe==2; 对于所有查询,我使用的是一个连接,这个问题可能隐藏在这里?根据您应该调用sqlite3\u config函数并选择一个线程模型。我建议首先尝试序列化SQLITE\u CONFIG\u 还要确保不要将SQLITE\u OPEN\u NOMUTEX标志用于sqlite3\u OPEN\u v2Objective c 如何在不同的线程中正确处理sqlite查询?,objective-c,database,multithreading,performance,sqlite,Objective C,Database,Multithreading,Performance,Sqlite,我正在开发一个使用sqlite数据库的iPhone应用程序。应用程序在后台线程中从互联网下载数据,UI位于主线程中。后台下载线程可以在数据库上执行插入、更新和选择。UI层还可以通过执行更新和选择来与数据库交互。如果在后台线程下载时我没有与UI进行大量交互,那么一切都可以正常工作。但是,在下载过程中,当主UI线程上执行大量更新时,我开始遇到问题 在对数据库的每个查询中,我都使用@synchronized语句,但这并不能解决问题。当来自UI的查询和来自反向线程的查询同时执行时,会导致数据丢失。如果主
通常,一个好的做法是将所有写操作序列化到单个线程。一个作家多个读者的模式。我甚至建议避免从主线程访问所有数据库,尽管这可能会很复杂,具体取决于您拥有的遗留代码量。SQLite的线程模式只保护单个函数调用。但是,每个连接都有一个事务,因此如果有多个线程同时访问数据库,它们仍然会相互干扰。 您应该使用多个连接
如果你想同时读写,考虑使用./p>你为什么手工写SQL?使用FMDB或其他包装器。他们通常也有三份像样的文件。更好的方法是使用核心数据。它有一个优秀的线程模型。我只是继续开发它,另一个开发人员制作了它。