首页 > 解决方案 > SQLite 可以留下零字节的文件吗?

问题描述

更新:我的以下假设之一是错误的。实际上,我们的 Macintosh 构建(该用户正在使用)没有 data_deleted.db3 作为安装的一部分。它是在启动时创建和填充的。所以我最好的猜测是该文件已创建,然后创建所有表的事务以某种方式失败,并留下零字节的文件。所以学到的教训(除了检查假设)是当你打开/创建一个 SQLite 文件时,它以零字节开始,如果你没有有效地向它写任何东西,SQLite 很乐意在这种状态下关闭它(并且很高兴在该状态下再次打开它)。为什么表创建事务可能失败仍然是一个谜,但这至少是问题的一个可以理解的原因。


我有一个使用 SQLite 的程序(合并文件版本 3.9.1 编译为我的 C++ 应用程序的一部分)。我使用两个 .db3 文件。一个称为 data.db3,另一个称为 data_deleted.db3。安装程序时,这两个文件都在程序的数据目录中。它们最初不包含任何记录,但由于数据库结构信息、索引等原因,data.db3 从 70k 开始,data_deleted.db3 从 20k 开始。该程序在启动时打开 data.db3 并在整个会话期间保持打开状态。在用户删除数据的不同时间,程序附加 data_deleted.db3 并将记录从 data.db3 复制到 data_deleted.db3,然后分离 data_deleted.db3。

一个用户遇到了 data_deleted.db3 中的字节为零的情况,我试图想象这是怎么发生的。我的理解是,无论我在打开、关闭、附加、分离、写入、读取、清理或其他任何我可能通过 SQLite API 对 data_deleted.db3 执行的操作,数据库都应该保持其完整性,当然不应该突然抹去所有的内容。

所以我只是问有 SQLite 经验的人是否对这听起来很熟悉。任何线索表示赞赏。

标签: sqlitedata-loss

解决方案


推荐阅读