Springboot集成sqlite3遇到的问题

本文讲述了在C/S系统中使用SQLite3作为文档型数据库遇到的问题,包括单连接限制、多线程下的并发问题以及删除数据后空间未释放。给出了手动执行VACUUM命令和设置auto_vacuum的解决方案,推荐使用前者。
摘要由CSDN通过智能技术生成

使用背景:

需要做C/S系统,数据库选择文档型的sqlite3

在使用过程中遇到了一些问题

1.sqlite3仅支持数据库单连接

​ 在最开始的时候由于直接粘贴复制,导致在每次停止服务后数据库都会被锁,报“[SQLITE_BUSY] The database file is locked (database is locked)”异常,后经排查,是配置了两个数据源,导致sqlite3数据库死锁。

​ sqlite3其本质是文档型数据库,在启动项目之后,无法再用数据库连接工具连接到数据库。在对数据库操作时亦如此,它不支持并行操作,所以在使用多线程操作时可能会报“[SQLITE_BUSY] The database file is locked (database is locked)”异常。

2.在删除库中的数据之后,数据库占用空间未减小

由于我是将数据库嵌入C/S系统,同时需要对库的数据进行清理,所以需要在删除之后清除所占内存

原因:从Sqlite删除数据后,未使用的磁盘空间会被添加到一个内在的”空闲列表”中用于存储你下次插入的数据。磁盘空间并没有丢失。但是也不向操作系统返回磁盘空间。

解决方案:

方案1.删除后手动执行VACUUM命令

由于我是通过springboot集成的,所以在清空数据库之后,新加一条清空数据库的指令

<update id="vacuum">
        VACUUM
  </update>
方案2.在数据库文件建成中,将auto_vacuum设置成“1”。

注意:只有在数据库中未建任何表时才能改变auto-vacuum标记。试图在已有表的情况下修改不会导致报错。

当开启auto-vacuum,当提交一个从数据库中删除除数据的事物时,数据库文件自动收缩。

数据库会在内部存储一些信息以便支持这一功能,这使得数据库文件比不开启该选项时稍微大一些。

推荐使用方案1

  • 9
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值