如何避免SQLiteException锁定错误?

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

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

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

SQLiteException: error code 5: database is locked

我理解SQLite在插入/更新时锁定整个数据库,但这些错误似乎只在我运行SELECT查询时插入/更新时才发生。SELECT查询返回一个游标,当我迭代它时,游标将被打开(几秒钟)。如果SELECT查询没有运行,我就永远得不到锁。我很惊讶SELECT会锁定数据库。这有可能吗,还是发生了什么事?

避免这种锁的最好方法是什么?

提问于
用户回答回答于

避免让游标在“很长一段时间”打开。如果您能够同时将所有数据都存储在内存中,那么就这样做。

用户回答回答于

您可能正在打开和关闭不同线程中的多个数据库连接。这是个坏主意。只需打开单个数据库连接,并在任何地方重用它;然后SQLite将确保并发访问被正确序列化。

扫码关注云+社区