我正在开发一个Android应用程序.它有多个线程读取和写入Android SQLite数据库.我收到以下错误:
SQLiteException:错误代码5:数据库已锁定
我理解SQLite会在插入/更新时锁定整个数据库,但在我运行select查询时插入/更新时似乎只会发生这些错误.select迭代返回一个游标,当我迭代它时,它会被打开很多(几次几秒).如果select查询没有运行,我永远不会得到锁.我很惊讶select可以锁定数据库.这是可能的,还是还有其他事情发生?
什么是避免这种锁定的最佳方法?
您可能在各种线程中打开和关闭多个数据库连接.这是一个坏主意.只需打开一个数据库连接,并在任何地方重用它; 然后,SQLite将确保正确序列化并发访问.
与jcwenger的答案一样,使用ContentProvider是实现此目的的另一种方法,但需要对代码进行更多的干扰性更改.