论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
应用中心
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
qidao123.com技术社区-IT企服评测·应用市场
»
论坛
›
数据库
›
Nosql
›
sqlite3报错:database is locked
sqlite3报错:database is locked
泉缘泉
论坛元老
|
2024-9-16 09:06:35
|
显示全部楼层
|
阅读模式
楼主
主题
1788
|
帖子
1788
|
积分
5374
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
题目描述:
使用visual studio2022创建动态库,动态库中包含向sqlite3数据库插入数据的函数,在测试函数时偶然出现database is locked的错误提示。
思绪:
1、最开始以为是代码写的有题目,大概对于某些资源没有释放,经过检查后发现代码中某些情况下没有释放stmt,修改后重新测试依然没有解决题目。
2、后来根据locked想到了锁,那么是不是被程序中其他线程锁住了呢?很遗憾,我的程序是单线程的,并不是这个题目。
3、经过网上查询资料发现,依然有很大大概是被其他某个东西锁住了。不肯定是线程,也许是其他历程,于是发现了我另一个软件(sqlite expert)打开数据库文件后一直在监听数据,时不时会更新数据。那么会不会是因为这个软件一直在监听数据导致的呢?但是很奇怪的是,这个软件只是读数据,而不会去写数据,真的是这个软件导致的题目吗?
题目缘故原由
经过查询sqlite3的锁机制发现:sqlite3并不支持并发写,在某一时刻只能有一个毗连去写数据。
sqlite3的锁包含五种状态:未加锁、共享锁、保留锁、未决锁、排他锁。
起首,当全部的毗连都没有毗连到数据库时,处于未加锁状态;
其次,当某个毗连试图去读取数据库数据时,此时处于共享锁状态,此时依然允许其他毗连申请共享锁;
接着,当某个毗连试图去写数据时,须要申请保留锁,意味着该毗连已经准备好写数据了(但还没写),此时依然允许有毗连申请共享锁;
最后,试图写数据的毗连须要获取写锁,由于sqlite3只允许一个线程写入数据,因此须要将保留锁升级成排他锁,从而写入数据。而当它试图升级为排它锁但还没得到时,则先将锁升级为未决锁,此时将不再允许有新的毗连得到共享锁,当全部的已经得到共享锁的毗连读取完数据释放共享锁后,此时试图写入数据的毗连将未决锁升级成排它锁,从而写入数据。
总结
那么此时回看之前的题目,由于sqlite expert会时不时自动刷新数据,因此,当sqlite expert没有对数据进行刷新时,数据可以正常的插入数据库文件中,但是当sqlite expert刷新数据时,就会导致database is locked,因为只要有一个毗连持有共享锁,都无法写入数据。这也是为什么偶然该错误的缘故原由。后来将sqlite expert换成了sqlite studio,sqlite studio不会自动刷新数据,须要手动点击刷新按钮才会刷新数据,因此用sqlite studio打开数据库文件并没有出现类似的题目(不要在连续插入数据时点击刷新数据的按钮,否则也会出现上述题目)。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
继续阅读请点击广告
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
泉缘泉
论坛元老
这个人很懒什么都没写!
楼主热帖
华为一镜到底主题__荣耀30系列安装教程 ...
日志模块
「Docker入门指北」容器很难理解?带你 ...
数据资产为王,如何解析企业数字化转型 ...
信创环境下分布式文件存储MinIO集群部 ...
28基于java的简单酒店数据管理 ...
xss-labs靶场
Vulnhub之M87靶机详细测试过程(不同提 ...
解决NuGet加载或下载资源慢的问题 ...
从入门到一位合格的爬虫师,这几点很重 ...
标签云
国产数据库
集成商
AI
运维
CIO
存储
服务器
浏览过的版块
向量数据库
信创/国产替代
快速回复
返回顶部
返回列表