sqllite更改数据库表或表结构后无法同步到db文件的问题

本文讲述了开发者在离线应用中遇到的问题,即数据库SQLite增加表后未同步到db文件,通过理解WAL日志模式和PRAGMAjournal_mode设置,解决了db-wal和db-shm文件的困扰,确保了正确更新数据库。
摘要由CSDN通过智能技术生成

最近几天在做一个离线端站点时遇到的一个问题,我在数据库中增加了几个表,数据库用的是sqllite以文件形式存储,增加完表之后打包生成了应用程序后发现读取表报错,db文件中并没有更新的几张表,查了下,发现在我增加表之后db文件并没有改变,而是增加了db-wal和db-shm这两个文件,db的更新日期没有变化,但是这两个文件的更新日期正好是我更新数据库的时间,网上百度了一下:

db-wal:从3.7.0版本开始,SQLite支持一种新的事务控制机制,称为“写前日志”或“WAL”。当数据库处于WAL模式时,到该数据库的所有连接都必须使用WAL。特定的数据库将使用回滚日志或WAL,但不能同时使用两者。WAL始终位于与数据库文件相同的目录中,并且具有与数据库文件相同的名称,但是附加了字符串“-wal”。

db-shm:从概念上讲,wal-index是共享内存,尽管当前的VFS实现为wal-index使用一个映射文件。映射文件位于与数据库相同的目录中,并具有与数据库相同的名称,后面附加了“-shm”后缀。因为WAL索引是共享内存,所以当客户机位于不同的机器上时,SQLite不支持网络文件系统上的journal_mode=WAL。数据库的所有用户必须能够共享相同的内存。
 

那么问题就在于这个WAL日志模式了,运行PRAGMA journal_mode可以获取,给PRAGMA journal_mode赋值可以更新日志模式。将PRAGMA journal_mode=delete,shm、wal文件消失,db文件更新,问题解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值