sqlitedatabase is locked

在多线程或多进程环境中使用SQLite时,可能会遇到'locked'错误,因为SQLite在同一时刻仅支持单个写操作,允许多个读操作。为了避免这个问题,建议在单个进程中以单例方式访问数据库,并使用读写锁。关键操作包括插入、删除、更新和表结构变更,而查询被视为读操作。确保在使用事务时正确配对beginTransaction和endTransaction,同时考虑是否需要关闭数据库。遵循单进程、单例和读写锁的原则可以有效管理SQLite数据库的并发访问。
摘要由CSDN通过智能技术生成

在操作Orm数据库sqlite时, 当存在多线程/多进程并行写时报错。 支持同一时刻多个读, 但同一时刻只能有一个写(不能有读);  简单记: 读写、写写是互斥的, 读读是可以并发的。
      因为多线程、多进程可以通过数据库名称操作同一个数据库, 建议只在一个进程中实例单例访问同一个数据库, 从而实现互斥判断逻辑;

      什么是写?  增加insert、删除delete、更新update和数据库表结构变化(例如修改已存在表的字段)
      什么是读? 只有一个query

      数据库存放在手机的  /data/data/包名/databases 中, 例如贝壳在 /data/data/com.lianjia.beike/databases 。
     推荐使用try/catch/finally实现资源访问、回收;

     使用事务时必须保证beginTransaction和endTransaction函数成对执行!!!

要点:单进程、单例、读写锁、数据库名称全局唯一

SqliteDatabase的close方法使得引用计数减1, 当引用计数为0时释放资源, 可根据业务需要评估是否执行。 


推荐数据库写法:

class ***He
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值