SQLLIte [SQLITE_BUSY] The database file is locked (database is locked) 问题

SqlLite是一个嵌入式轻量级文件数据库

  1. 侵入式 。 方便,不需要安装数据库,仅需要一个目录
  2. 轻量级。支持的数据量不大。
  3. 单文件。有文件锁。标题出现的问题就是触发了锁。

所以,sqlLite的锁是库锁,因为sqlLite的数据库就是一个后缀为 .db的文件,文件是有写锁的

因此给sqlLite分配太多链接没有意义。

这个问题就是因为并发触发了sqlLite的锁机制,解决方案就是变成顺序读和写,维护一个链接就可以了.

Hikari 配置示例如下 :

java 复制代码
        HikariDataSource hikariDataSource = new HikariDataSource();
        hikariDataSource.setAutoCommit(true);
        hikariDataSource.setJdbcUrl("jdbc:sqlite:D:/home/sqllite/database-visual/database.db");
        // 等待连接池分配连接的最大时长(毫秒),超过这个时长还没可用的连接则发生SQLException, 缺省:30秒
        hikariDataSource.setConnectionTimeout(10 * 60 * 1000);
        // 一个连接空闲状态的最大时长(毫秒),超时则被释放(retired),缺省:10分钟
        hikariDataSource.setIdleTimeout(10 * 60 * 1000);
        // 这里是SQLLite数据库,维护一条链接即刻,并非时排队
        hikariDataSource.setMinimumIdle(1);
        hikariDataSource.setMaximumPoolSize(1);

SqlLite很难应对高并发场景,sqllite是轻量数据库,适用于各种设备的客户端数据库,客户端直接面向用户,而用户的操作基本上都是顺序的,并且数据量不是很高。
本人在服务器中使用sqllite 使用来记录服务信息和一些不重要,数据量不是很大的订阅任务的,并且订阅信息会自动备份清理,也基本不会产生并并发查询。 大家使用sqllite还需要注意它的特征

相关推荐
Elastic 中国社区官方博客8 小时前
Elasticsearch Serverless 如何通过 hollow shards 将索引节点关闭次数降低 30%
大数据·数据库·elasticsearch·搜索引擎·serverless·全文检索
ycvv8 小时前
手机启动失败后的数据提取评估:系统状态、加密条件与文件验收
服务器·数据库·智能手机
不恋水的雨8 小时前
gbase中union all导致末尾多出空格的坑
数据库·sql·mysql
AI 算法大模型备案~当当9 小时前
各地备案数量怎么看:一份属地公告的认读与台账方法
java·数据库·人工智能
梦帮科技9 小时前
量子张量网络破局大模型:从矩阵乘积态 (MPS) 到张量列 (TT-SVD) 低秩收缩全推导
网络·数据结构·数据库·线性代数·矩阵·架构·模拟退火算法
曹牧10 小时前
PL/SQL Developer:导出建表语句
数据库·sql
念念不忘 必有回响10 小时前
MySQL 事务与隔离级别完全指南
数据库·mysql
JosieBook11 小时前
【WinForm 代码反脆弱系列】04 数据库操作 —— 连接字符串、连接对象与连接池
数据库·oracle
小蒜学长11 小时前
基于SpringBoot+Vue的小学数学智能出题系统(代码+数据库+LW)
java·数据库·spring boot·后端·智能出题系统
71-311 小时前
MySQL密码重置
数据库·笔记·学习·mysql