如何避免SQLiteException锁定错误?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (43)

我正在开发一个Android应用程序。它有多个线程读取和写入Android SQLite数据库。我收到以下错误:

SQLiteException:错误代码5:数据库被锁定

我理解SQLite在插入/更新时锁定整个数据库,但这些错误似乎只在插入/更新时发生,而我正在运行select查询。选择查询返回一个游标,当我迭代它时,这个游标被打开的时间相当长(几秒钟)。如果选择查询没有运行,我永远不会获得锁。我很惊讶,选择可以锁定分贝。这是可能的,还是其他的事情呢?

提问于
用户回答回答于

通过避免将游标留在“相当长一段时间”。如果你可以负担得起一次将所有数据存储在内存中,那就这样做。

如果不能,则尝试增加忙闲超时。

用户回答回答于

你可能会在各个线程中打开和关闭多个数据库连接。这是一个坏主意。只需打开一个数据库连接,并在任何地方重复使用; 然后SQLite将确保并发访问序列化正确。

使用ContentProvider是实现这一目的的另一种方式,但需要对代码进行更多干扰性更改。

扫码关注云+社区