SQLite多线程并发操作

  • 先理清楚一个概念 多线程操作多数据库连接操作是不同的概念

  • 多线程操作:多线程操作数据库时可以使用一个数据库连接,也可以每个线程使用各自的数据库连接

  • 多数据库连接操作:即每个数据库操作使用的是各自的数据库连接

  • SQLite默认情况下只支持单个数据库连接操作,多连接并发操作时会出问题,需要开启wal模式才能进行多项城并发读操作,写操作仍能不可以并发。

如何理解?

  • SQLite数据库仍能是一个文件,没有锁机制并发写操作是有问题的,所以最多只能实现并发读操作。

两种解决方案

  • 1、多线程读,多线程写,只使用共同一个数据库连接,即使用同一个SQLiteHelper连接
  • 这种情况下由于使用的是同一个数据库连接,SQLite内部有锁机制,不会出现异常。这种多线程操作并不是真正的并发操作,由于锁机制的存在所以仍能是阻塞的。
  • 2、多线程读,单线程写,每个线程使用各自独立的数据库连接,但是需要开启wal模式,以开启数据库连接池
  • 这种情况下是真的实现了多线程并发读操作,但是写操作仍能只可以单线程,如果多线程写(每个线程使用各自的数据库连接)就会出现问题。

两种方案对比

  • 读操作效率上没有什么差别,在读取操作上,理论上并发操作越多方案2效率越高。在实际测试情况下100个线程并发读取,每个线程读取50次,方案一的用时是方案二的2倍多。

关于方案一的具体实现,有两种方式

  • 1、开启一个数据库连接永不关闭,也是so上的大神推荐的做法
  • 2、自己写一个管理类,具体实现见:android Sqlite多线程访问异常解决方案

如何开启wal模式?

  • SQLiteDatabase.enableWriteAheadLogging();

测试代码:https://github.com/alantaorenjie/SQLiteTest.git

参考链接

  • android 多线程数据库读写分析与优化
  • Android使用SQLITE3 WAL模式

SQLite多线程并发操作相关推荐

  1. MYSQL多线程并发操作同一张表同一个字段的更新问题

    MYSQL多线程并发操作同一张表同一个字段的更新问题? 可以用乐观锁方案: 在表里增加个字段,版本号字段 每次更新前先从数据库里获取这个版本号的值,然后更新时要同步更新版本号+1,并且增加更新条件版本 ...

  2. java sqlite 多线程并发_C#_C#解决SQlite并发异常问题的方法(使用读写锁),本文实例讲述了C#解决SQlite并 - phpStudy...

    C#解决SQlite并发异常问题的方法(使用读写锁) 本文实例讲述了C#解决SQlite并发异常问题的方法.分享给大家供大家参考,具体如下: 使用C#访问sqlite时,常会遇到多线程并发导致SQLI ...

  3. java sqlite 多线程并发_sqlite之多线程总结

    12.android 多线程数据库读写分析与优化 11.多线程操作Sqlite? ==== 最新需要给软件做数据库读写方面的优化,之前无论读写,都是用一个 SQLiteOpenHelper.getWr ...

  4. java 多线程全局变量_JAVA多线程并发操作全局变量

    现在我有一个需求: 用户想发起一个请求,用户必须输入一个Licence Key,然后查看有没有权限访问,并且返回可用数量,然后后台有很多的线程会操作这个变量. 我本来是准备把这个变量存储在表中,根据用 ...

  5. java sqlite 多线程并发_Android中Sqlite数据库多线程并发问题

    最近在做一个Android项目, 为了改善用户体验,把原先必须让用户"等待"的过程改成在新线程中异步执行.但是这样做遇到了多个线程同时需要写Sqlite数据库,导致操作数据库失败. ...

  6. java多线程抽奖_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  7. mysql服务器多线程模型_java 线程池、多线程并发实战(生产者消费者模型 1 vs 10) 附案例源码 - 陈彦斌 - 博客园...

    导读 前二天写了一篇<Java 多线程并发编程>点我直达,放国庆,在家闲着没事,继续写剩下的东西,开干! 线程池 为什么要使用线程池 例如web服务器.数据库服务器.文件服务器或邮件服务器 ...

  8. java的知识点32——多线程 并发同步的 性能分析、快乐影院  订票操作

    多线程  并发  同步  性能分析 /*** 线程安全: 在并发时保证数据的正确性.效率尽可能高* synchronized* 1.同步方法* 2.同步块* @author Administrator ...

  9. Android 数据库综述(二) 程序计算器与信号量来处理多线程并发问题

    Android 数据库综述(二) 程序计算器与信号量来处理多线程并发问题 多线程操作数据库,为处理并发问题,大家第一想到的是加锁操作 ,SQLite是文件级别的锁.SQLite3对于并发的处理机制是允 ...

最新文章

  1. MindSpore Lite整体架构介绍
  2. index.html安全文件,restorecon - 恢复文件的安全上下文
  3. 如何测试一个空的JavaScript对象?
  4. Windows窗体编程(二)
  5. Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate
  6. java8的stream特性_Java8新特性介绍:Stream API
  7. mysql常见函数的实列
  8. (dp)openjudge 复杂的整数划分问题
  9. 渗透测试-主动信息收集(3)
  10. vue3 effect
  11. 仿真软件proteus构建流水灯实验
  12. JAVA算法(四平方和)
  13. Harbor项目高手问答及赠书活动火热进行中
  14. android 后台自动拍照,怎么实现后台拍照功能,求解
  15. 关于 麒麟系统启动应用报错“undefined symbol: __cxa_throw_bad_array_new_length, version Qt_5“ 的解决方法
  16. linux服务器好管理吗,给初学者Linux服务器管理建议
  17. Mac如何通过bootcamp(启动转换助理)安装Windows10系统?附教程和下载
  18. usart串口发送与接收问题
  19. 中南大学计算机科学与技术课程,中南大学计算机科学与技术专业本科培养方案.doc...
  20. 人工智能有多吃香?人工智能岗位薪资水平曝光(附赠37G学习资料大礼包)

热门文章

  1. 卡片式记忆工具:Studies Mac版
  2. netbsd源码分析(1)
  3. vue 幻灯片组件_带有vue的漂亮幻灯片组件
  4. IDEA打包jar,java运行main函数
  5. Mit6.006-problemSession04
  6. c语言程序设计何钦铭视频教程,C语言程序设计 (何钦铭 颜晖 著) 高等教育出版社第1章 教案.ppt...
  7. python3中urlopen_python3 urlopen打开包含中文的url
  8. 电子协会 C语言 3级 50 、猴子吃桃
  9. 鸿蒙安卓8,安卓VS鸿蒙第三方件切换宝典 V2.0(第一部分)
  10. 23种设计模式-工厂模式