在操作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