sqlite3 database is locked 问题解决方案

2023-05-16

sqlite3 database is locked 问题解决方案


  • sqlite3只支持一写多读.
    读与读可以同时进行
    读与写不可同时进行
    写与写不可同时进行

  • 一写多读的案例

场所:男厕所
写: 打扫厕所的女性(一个): 上厕所的男性(多个)

解决方案1

这个问题可以用线程间的同步方案来解决.同步方案的话有多种,但读写锁最适合这个问题.
这个问题和读写锁不谋而合,所以可以用读写锁来解决这个问题.
当然也可以用其他线程间同步方案来解决.
针对读写锁,请参阅线程与读写锁


解决方案2

自己编写函数对当前数据库状态进行判断,并在状态为SQLITE_BUSY的时候一直尝试执行命令

#include <sqlite3.h>

int nCount=0;  
int nRet=0;  
do   
{  
    nRet = sqlite3_exec( m_db , buf , 0 , 0 , &pErrMsg );  
    if(nRet != SQLITE_OK){
        if (nRet == SQLITE_BUSY)  
        {  
            Sleep(1);  
            continue;  
        }else{ 
            //TODO
            //break;                                                         
        }
    }
} while (1);  

解决方案3

通过sqlite3给的函数sqlite3_busy_handler来实现了延时(次数的延时)

sqlite3_busy_handler(db,callback_db,(void *)db);
//如果处于SQLITE_BUSY状态,会调用callback_db函数N次,知道N等于0或者SQLITE_BUSY状态消息.    这里相当一个延时,但并不是延时.与延时不同的是,如果SQLITE_BUSY状态解除,函数会在次数变为0前返回.
sqlite3_exec(db , sqlcmd , NULL, NULL, &zErrMsg );    
sqlite3_close(db);    

解决方案4

通过sqlite3给的函数sqlite3_busy_timeout来实现了延时(时间的延时)

//sqlite3_busy_timeout实际上是封装了sqlite3_busy_handler,这里面sqlite3_busy_handler调用的是个固定的回调,通过这个回调实现了固定时间的延时.

sqlite3_busy_timeout(db, 30*1000); //最长等待30m ,也相当于延时
sqlite3_exec(db , sqlcmd , NULL, NULL, &zErrMsg );    
sqlite3_close(db);    

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sqlite3 database is locked 问题解决方案 的相关文章

  • 使用python shelve跨平台

    我希望得到关于 Python 中的书架 数据库的一些建议 问题 我在 Mac 上创建了一个数据库 我想在 Windows 7 上使用该数据库 我使用 Python 3 2 MacOS 10 7 和 win 7 当我在 Mac 上打开并保存我
  • 如何使用sql脚本更改列的属性

    如何使用 sql 脚本更改列的属性 这是我尝试过但出现错误的方法 ALTER TABLE dbo tblBiometricPattern COLUMN BiometricPatternID TINYINT NOT NULL IDENTITY
  • 每个数据库多个/单个 *.edmx 文件

    我有一个通过 ADO net 数据服务与数据库交互的项目 数据库很大 近 150 个具有依赖关系的表 该项目几年前开始 当时使用的是数据集 现在我们正在转向实体模型关系 由于我们添加了更多需要使用的表 该模型正在不断增长 这是管理这一切的正
  • 如何根据条件删除结果以计算平均值

    我有下面的架构 对其的快速解释是 鲍勃评分为 5 5 詹姆斯评分 1 5 梅西百货评分高达 5 5 逻辑 如果我是 A 请查找我屏蔽的所有人 查阅所有电影评论 任何留下电影评论且 personA 已屏蔽的人 请将其从计算中删除 计算电影的平
  • 我应该定义索引(A)和索引(B),还是索引(A,B),或者两者都定义?

    在我的表中 我有两个密切相关的列 A 和 B 我应该考虑哪些因素来决定是否创建 索引 A 和索引 B 索引 A B 以上两者 如果我 仅使用类似的查询where A 5 and B 10 并且从不喜欢where A 5 也可以使用类似的查询
  • 拉拉维尔; “SQLSTATE[HY000] [2002] 连接被拒绝”

    我在 OSX 主机上设置了 homestead 2 0 并使用 Sequel Pro 我可以进行迁移并确认数据已在Sequel Pro中迁移 因此看起来数据库连接没有问题 但是 一旦我尝试从 Laravel 4 2 应用程序获取数据 它就无
  • 为 java 项目创建安装

    我创建了一个 java 项目 它使用数据库来检索 编辑和保存数据 我使用 Netbeans 完成了该项目 现在我想在该项目之外创建一个安装 为此 我想包含与项目一起安装的数据库 我用来连接数据库的代码是 Class forName com
  • 使用转义换行符和回车符取消转义字符串

    我正在尝试编写一个 PLPGSQL 函数来混淆 审查 编辑文本 Obfuscate a body of text by replacing lowercase letters and numbers with symbols CREATE
  • SQL Server 大小写/排序规则问题

    今天我在客户数据库中遇到了一个奇怪的情况 SQL Server 2005 数据库排序规则不区分大小写 因此我可以使用任何大小写编写 SQL 查询 没有任何问题 除了一个 一张特定表中的一个特定列称为 DeadZone 如果我这样查询 从表名
  • Hibernate saveOrUpdate 与更新与保存/持久

    我正在努力理解休眠方法之间的细微差别 saveOrUpdate update save persist 我知道网站上有一些类似的问题 Hibernate中不同的保存方式有什么区别 https stackoverflow com questi
  • Riak 在 MapReduce 查询中失败。使用哪种配置?

    我正在与 riak riak js 结合开发一个 nodejs 应用程序 并遇到以下问题 运行此请求 db mapreduce add logs run 正确返回存储在存储桶日志中的所有 155 000 个项目及其 ID logs 1GXt
  • django AuditTrail 与还原

    我正在开发一个新的网络应用程序 我需要将数据库中的任何更改存储到审核表中 此类审计表的目的是 稍后在真正的物理审计中 我们可以确定在某种情况下发生了什么 谁编辑了什么以及数据库当时的状态是什么 复杂的计算 所以大多数审计表将被写入而不是读取
  • SQLite (Android):使用 ORDER BY 更新查询

    Android SQLite 我想要在 myTable 中的其他行之间插入行在android中使用SQLite 为此 我尝试增加从第 3 行开始的所有行的 id 这样 我就可以在位置 3 处插入新行 myTable 的主键是列 id 表中没
  • 计算 mysql 数据库行数的最佳方法

    在遇到 mysql 查询加载时间慢的问题后 我现在正在寻找计算行数的最佳方法 我曾经愚蠢地使用过mysql num rows 函数来做到这一点 现在意识到这是最糟糕的方法 我实际上正在制作一个分页来用 PHP 制作页面 我找到了几种计算行数
  • sqlite3从打印数据中删除括号

    我创建了一个脚本 用于查找数据库第一行中的最后一个值 import sqlite3 global SerialNum conn sqlite3 connect MyFirstDB db conn text factory str c con
  • java库维护数据库结构

    我的应用程序一直在开发 所以偶尔 当版本升级时 需要创建 更改 删除一些表 修改一些数据等 通常需要执行一些sql代码 是否有一个 Java 库可用于使我的数据库结构保持最新 通过分析类似 db structure version 信息并执
  • SSDT SQL Server 数据库项目中用于架构比较的命令行/API?

    在 Visual Studio 2012 中 我们有Schema Compare http msdn microsoft com en us library hh272690 28v vs 103 29 aspx in SSDT http
  • dbms_xmlgen.getxml - 如何设置日期格式

    我们使用 dbms xmlgen getxml 实用程序通过 SQL 查询生成 xml 该查询从几乎 10 15 个相关表中获取数据 默认情况下 日期格式生成于dd MMM yy格式 有什么方法可以在 dbms xmlgen getxml
  • 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式

    我正在开发 Spring Hibernate MySql 应用程序 该应用程序尚未投入生产 我目前使用 Hibernatehbm2ddl该功能对于管理域上的更改非常方便 我也打算用Flyway用于数据库迁移 在未来的某个时候 该应用程序将首
  • 如何修复 pgbackups 错误:备份 url 无效?

    我正在尝试按照迁移到 Cedar 的说明进行操作 除了我进行了重大重写 因此这不是前一个应用程序的分支 而是一个单独的分支 并停留在数据库迁移步骤 我安装了 pgbackup 和 heroku postgresql 插件 但得到了这个结果

随机推荐

  • 在函数里修改全局变量

    names 61 39 Lilei 39 def change name global name 全局变量我来撑控 names 61 39 Hi 39 print names change name 39 Hi 39 print names
  • 守护进程详解及创建,daemon()使用

    转载于 xff1a http www cnblogs com mickole p 3188321 html 侵删 一 xff0c 守护进程概述 Linux Daemon xff08 守护进程 xff09 是运行在后台的一种特殊进程 它独立于
  • 在VsCode中如何使用Git

    大部分前端都是用VsCode作为代码编辑器 xff0c 那么我们如何在VsCode中使用Git呢 xff1f 准备工作 xff1a 1 在vscode中安装插件GitLens 使用教程 xff1a 1 点击文件 新建窗口 2 克隆git仓库
  • 关于C++继承类和对象

    继承是C 43 43 中一个很好的特性 xff0c 它能够从已有的类派生出新的类 xff0c 而继承类继承了原有类 xff08 称为基类 xff09 的特征 继承类有三种 xff0c 公有继承 保护继承 私有继承 使用公有继承 xff0c
  • 是程序员就去Leetcode刷题吧

    leetcode 是一个美国的在线编程网站 xff0c 上面主要收集了各大IT公司的笔试面试题 xff0c 对于应届毕业生找工作是一个不可多得的好帮手 这个网站的的好处在于它会告诉你测试数据以及你的输出和正确的输出是什么 xff0c 方便大
  • 四旋翼飞行器的控制规律及算法实现

    四旋翼飞行器的控制规律及算法实现 http bbs loveuav com forum php mod 61 viewthread amp tid 61 211 amp fromuid 61 19507 出处 爱无人机 专注无人机开发与设计
  • 基于数据融合和串级PID的小型四旋翼无人机高度测量与控制系统

    作者 xff1a Tomy 摘要 xff1a 简单介绍了一种基于 Mahony 算法无人机姿态解算算法 xff0c 并在这个的基础上设计了一 种融合惯导加速度计和气压计的小型无人机高度测量系统 xff0c 同时利用该高度测量系统设计了 基于
  • 四旋翼飞行器Quadrotor飞控之 PID调节(参考APM程序)

    做四轴也有一段时间了 xff0c 最近一直在做PID方面的工作 现在四轴基本可以实现室内比较稳定的飞行 xff0c 操控手感也可以接受 稍后上试飞视频 在此把一些PID方面的经验总结总结和大家分享一下 首先介绍一下大概的硬件组成 xff1a
  • 四旋翼微型飞行器设计

    作者 xff1a 红桃K 0 引言 微型飞行器 Micro Air Vehicle xff0c 简称MAV 是20世纪90年代发展起来的一种新型飞行 器 根据美国国防高级研究计划局 DARPA 的定义 xff0c 微型飞行器的基本技术指标包
  • 下载软件 (一) JLink_Windows

    硬件下载器 用 jlink 或者 jlink ob 软件用 JLink Windows 套件中的 JFlash span class token punctuation span exe https span class token ope
  • VFS: Cannot open root device 解决思路

    理论 VFS Cannot open root device 34 s 34 A or s B error d C n 34 Please append a correct 34 root 61 34 boot option here ar
  • FreeRTOS 中 RISC-V-Qemu-virt_GCC 的 运行流程

    该文章 中讲述了 FreeRTOS RISC V Qemu virt GCC 的 启动流程 本篇文章讲述一下 运行了流程 我将 RISC span class token operator span V span class token o
  • 基于模块分类和符号export 对 Freertos 代码整体解读

    文章目录 链接可用的架构ARMv7ARMv8RISC V 32RISC V 64 目录架构 以 RISC V Qemu virt GCC为例代码分类BSP 代码及用户代码架构代码内核代码 现有的BSP支持是否可以在 QEMU 仿真整体编译器
  • VantUI中单选和多选修改为按钮样式

    VantUI不像ElementUI xff0c 单选和多选有按钮样式 xff0c 设置type 61 34 button 34 就好了 xff0c 在VantUI中我们研究发现 xff0c 单选和多选设置选中时 xff0c 只有前面的图标改
  • 系统调用,上下文切换(cpu上下文,进程上下文,线程上下文,中断上下文,进程切换,线程切换)

    用户态切换到内核态的三种方式 xff1a 系统调用 xff0c 中断 xff0c 异常 CPU上下文切换的分为几个不同的场景 xff1a 进程上下文切换 xff0c 线程上下文切换 xff0c 中断上下文切换 进程上下文概念 1 当一个进程
  • TP-LINK 路由器 无线桥接 设置

    前言 家里Wifi信号不好 span class token punctuation span 想用路由器桥接网络 正好家里有一款TP span class token operator span LINK路由器 span class to
  • PCIe MSI-X 中断 设置 过程

    主机侧初始化 msi span class token operator span map span class token operator 61 span span class token operator lt span span c
  • arm与arm-linux中的 ioport 和 iomem

    这里讲述了 但是描述的不太清晰 本文分几个概念来讲述 arm amp x86 x86 有 I span class token operator span O端口 span class token punctuation span 有loa
  • GICv3 its 中断发生流程

    ITS 的结构 ITS 的设置流程 ITS 的中断发生流程 有两种方法 span class token operator span span class token number 1 span 设备向 span class token f
  • sqlite3 database is locked 问题解决方案

    sqlite3 database is locked 问题解决方案 sqlite3只支持一写多读 读与读可以同时进行 读与写不可同时进行 写与写不可同时进行 一写多读的案例 场所 span class token punctuation s