什么是 SQLite 文件?
带有 .sqlite 扩展名的文件是使用 SQLite 软件创建的轻量级 SQL 数据库文件。它是一个文件本身的数据库,实现了一个自包含、功能齐全、高可靠的SQL数据库引擎。通过简单地通过网络交换这些文件,SQLite 数据库文件可用于在系统之间共享丰富的内容。几乎所有的手机和电脑都使用 SQLite 来存储和共享数据,是跨平台应用程序的文件格式选择。由于其紧凑的使用和易用性,它捆绑在其他应用程序中。 SQLite 绑定存在于编程语言中,例如 C、C#、C++、Java、PHP 和许多其他人。
SQLite 文件格式
SQLite 实际上是一个 C 语言库,它使用 SQLite 文件格式实现 SQLite RDBMS。随着新设备每天的发展,其文件格式一直保持向后兼容以适应旧设备。 SQLite 文件格式被视为数据的长期存档格式。
数据库文件
SQLite 数据库通过两个文件完全维护。
- 主数据库文件 - 包含 SQLite 数据库的完整状态
- 回滚日志 - 将附加信息存储在第二个文件中,并在执行事务期间使用。如果 SQLite 处于 WAL 模式,则会维护一个写入头日志文件。
日志文件
该文件旨在保留所有信息,以防在计算机崩溃等情况下无法完成最后一次交易。该文件用于将数据库文件恢复到一致状态。
页
主 SQLite 数据库文件由一页或多页组成。在任何时间点,主数据库中的每个页面都有一个单一的用途,它是以下之一:
- 锁字节页 *一个freelist页面
- 一个freelist的主干页面 *一个freelist叶子页面
- 一个 b 树页面
- 一个表b-tree内部页面
- 一个表b-tree叶子页
- 一个索引b-tree内部页面
- 一个索引 b-tree 叶页
- 有效载荷溢出页面
- 一个指针映射页面
SQLite 数据库文件的大小可以从几千字节到几千兆字节不等。
SQLite 标头
SQLite 数据库标头位于数据库文件的前 100 个字节中。每个有效的 SQLite 数据库文件都以 16 个字节(十六进制)开头:53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00。标题字段的详细信息如下表所示。
偏移量 | 尺寸 | 描述 |
---|---|---|
0 | 16 | 标头字符串:“SQLite 格式 3\000" |
16 | 2 | 以字节为单位的数据库页面大小。必须是介于 512 和 32768(含)之间的 2 的幂,或者表示页面大小为 65536 的值 1。 |
18 | 1 | 文件格式写入版本。 1 为遗产; 2 为 WAL。 |
19 | 1 | 文件格式读取版本。 1 为遗产; 2 为 WAL。 |
20 | 1 | 每页末尾未使用的“保留"空间字节数。通常为 0。 |
21 | 1 | 最大嵌入有效载荷部分。必须是 64。 |
22 | 1 | 最小嵌入有效载荷部分。必须是 32。 |
23 | 1 | 叶有效载荷部分。必须是 32。 |
24 | 4 | 文件更改计数器。 |
28 | 4 | 以页为单位的数据库文件大小。 “头内数据库大小"。 |
32 | 4 | 第一个 freelist 中继页的页码。 |
36 | 4 | 空闲列表页面的总数。 |
40 | 4 | 模式 cookie。 |
44 | 4 | 模式格式编号。支持的模式格式为 1、2、3 和 4。 |
48 | 4 | 默认页缓存大小。 |
52 | 4 | 在自动真空或增量真空模式下最大根 b-tree 页面的页码,否则为零。 |
56 | 4 | 数据库文本编码。值 1 表示 UTF-8。值 2 表示 UTF-16le。值 3 表示 UTF-16be。 |
60 | 4 | 由 user_version pragma 读取和设置的“用户版本"。 |
64 | 4 | 对于增量真空模式为真(非零)。否则为假(零)。 |
68 | 4 | 由 PRAGMA application_id 设置的“应用程序 ID"。 |
72 | 20 | 保留扩展。必须为零。 |
92 | 4 | 有效的版本号。 |
96 | 4 | SQLITE_VERSION_NUMBER |