SQLite 数据库文件分析

合集下载

sqlite3.dll

sqlite3.dll

sqlite3.dllsqlite3.dll 是一个与 SQLite 数据库引擎相关的动态链接库文件。

该文件包含用于处理 SQLite 数据库的函数和工具。

本文将详细介绍sqlite3.dll 的作用、用途和常见问题解决方法。

一、概述sqlite3.dll 是 SQLite 数据库引擎的一部分,提供了对 SQLite 数据库的访问和操作功能。

它是一个开源的、轻量级的、嵌入式的关系型数据库管理系统。

SQLite 是一个非常流行的数据库引擎,被广泛应用在多种平台和操作系统中,包括Windows、Linux、macOS 等。

二、作用与用途1. 数据库管理:sqlite3.dll 提供了一套强大的函数和工具,用于创建、管理、查询和维护 SQLite 数据库。

它支持多种数据类型,包括整数、浮点数、文本和二进制数据。

2. 数据库操作:sqlite3.dll 支持事务处理,可以实现数据的插入、更新、删除和查询操作。

它还支持索引、触发器和存储过程等高级数据库特性。

3. 数据库安全性:sqlite3.dll 提供了可靠的数据存储和保护机制。

它支持数据库的加密,并可以使用密码保护数据库文件,从而确保数据的安全性。

4. 数据库性能优化:sqlite3.dll 采用了一系列优化技术,包括预编译、缓存和数据压缩等,以提高数据库的运行效率和性能。

三、常见问题解决方法1. 缺少 sqlite3.dll 文件:如果在运行应用程序或使用某个功能时遇到缺少 sqlite3.dll 文件的错误提示,可以尝试以下解决方法:- 重新安装应用程序:有时缺少 dll 文件是由于应用程序本身安装不完整或损坏导致的。

可以尝试重新安装应用程序来解决该问题。

- 从官方网站下载:访问 SQLite 官方网站,下载最新版本的SQLite 安装文件,然后运行安装程序,它会自动安装 sqlite3.dll 文件。

2. 版本冲突:有时应用程序需要特定版本的 sqlite3.dll 文件。

sqlite3存储格式

sqlite3存储格式

sqlite3存储格式本篇介绍sqlite3数据库⽂件的存储格式。

通过阅读源读源代码可以知道sqlite的设计思想。

⼀个sqlite数据库⽂件对应着⼀个数据库。

sqlite将数据库⽂件划分⼤⼩⼀致的存储(以区分内存)页⾯,并通过⼀系列数据结构将它们组织起来。

sqlite组织页⾯的数据结构主要有B树和⼆维链表。

每⼀个页⾯要么是B树的叶⼦或结点,要么是⼆维链表的⼀个节点。

⽤作B树的页⾯都有8或12字节的页⾯信息头,特别地第⼀个页⾯除了是表的根结点是数据库⽂件的根,所以它⾸先包含100字节的是库信息,然后才是作为⼀个是B树的根结点。

另⼀⽅⾯闲置的页⾯没有页⾯头,它的链头是在第⼀个页⾯的库信息头。

⼆维链表的第⼀维由单向链表实现,第⼆维由数组实现。

⽤作第⼀维节点的页⾯也是⼀个空闲页⾯,被统计在库信息头。

数据库层⾯的表和索引,在底层存储格式中⽤B树结构组织,第⼀张表或索引都对应着⼀棵B树。

底层存储中所有空闲(闲置)页⾯,都由⼆维链表链接起来。

B树页⾯,有统⼀的存储格式。

⾸先是页⾯信息头,然后紧跟着页内数据排序索引(请区分数据库的表索引,这⾥是数据结构中的外部排序索引)数组;⽽页内数据存储在页⾯的尾部。

数据索引和数据单元分别从正反两个⽅向向页⾯中间伸展,页⾯中间部分形式空闲区域。

sqlite数据库⽂件使⽤⾃然字节序存储数据,这种字节序有利于它⾥⾯使⽤到可变长整形解释。

各种具体的数据结构和详细的格式编排请⾃⾏参阅源代码,不⼀⼀贴上划⽔。

⾃⾏⽤任意⼀门编程语⾔写程序遍历解读sqlite数据库⽂件其中的内容。

在这⾥定义本篇使⽤的⼀些术语:页⾯,数据库⽂件页⾯,请区分内存页⾯或虚地址空间页⾯,尽管sqlite默认页⾯⼤⼩也是4KB。

指针,请区分c语⾔指针,这⾥指⽂件内地址索引,或页⾯内地址偏移。

单元,cell,存储在B树页⾯的单位数据。

整型主键,sqlite表默认的⾃增计数。

变长整型,sqlite存储中使⽤到的⼀种基于⾃然字节序的变长整数存储⽅式。

SQLite数据库结构分析在司法鉴足中的应用

SQLite数据库结构分析在司法鉴足中的应用
中 国 司法 鉴 定 2 0 1 3 年第6 期( 总第7 1 期) ns i c Pr a c t i c e
S Q L i t e 数 据 库 结构 分 析在 司 法鉴 定 中的应 用
沙 晶, 蔡立 明
( 公 安 部 第 三 研 究 所 信 息 网络 安 全 公 安 部 重 点 实验 室 , 上海 2 0 0 0 3 5 ) 摘 要 : S Q I i t e是一 个轻 量级 S QL数 据库 引擎 , 由于 运行 简单 、 功 能强 大 , 被 广 泛应 用在 手机 短信 、 浏 览器历 史记 录等 各
f i l e’ s s t r u c t u r e i n An d r o i d p h o n e s .E x a mp l e s a r e g i v e n t o i l l u s t r a t e t h e me t h o d f o r a c q u i r i n g i n f o r ma t i o n o f d e l e t e d s h o r t me s —
文 章 编 号 :1 6 7 l 一 2 0 7 2 一 ( 2 0 1 3 ) 0 6 — 0 0 7 3 — 0 6
S t r u c t u r a l An a l y s i s o f S QL i t e D a t a b a s e i n F o r e n s i c s
s p e c i i f c c o n t e n t s i n S Q L i t e d a t a b a s e i s f r e q u e n t l y r e q u i r e d . T h i s p a p e r p r e s e n t s d e t a i l e d a n a l y s i s o f S Q L i t e a n d“ mms s ms . d b ’ ’

SQLite文件分析

SQLite文件分析

SQLite文件分析作者:饶珺1前言在移动终端APP开发中,数据存储的性能是影响APP整体性能的重要因素之一,当今主流手机操作系统:IOS、Android、WindowsPhone等平台最常使用的数据库是SQLite,研究SQLite 对于深度优化移动APP数据存储性能会比较有帮助。

本文重点介绍SQLite主数据文件的操作原理,文中没有过多介绍具体字节级的含义,而较多使用了图例来方便大家理解。

本文没有讨论SQLite日志文件等临时文件,日志文件主要用于保障主数据文件的完整性。

1.1 预备知识(1)Btree,B-tree,B+tree文中涉及到的最重要的数据结构是B树,SQLite文件大体就是许多棵B树的集合。

每一张数据表、表的每一个索引都是以B树的形式存储在文件中的。

读本文前需要了解B树相关知识。

在SQLite中,存储表数据用B+tree,存储表索引用B-tree。

表索引和表数据采用不同的B树的原因是为了提高IO效率。

注:后面文中在不区分B-tree和B+tree的地方统一用Btree来统称这两种B树。

(2)Page(页)SQLite数据库文件由固定大小的“页(page)”组成。

页的大小可以在512~32768之间(包含这两个值,必须是2的指数),默认大小为1024个字节。

页大小可以在数据库刚创建时设置,创建数据库之后,Page大小不再改变。

Page是SQLite中B树的结构单元,也是磁盘读写的单元。

数据文件中的Page从1开始编号,顺序排列在文件中,通过Page号可以很方便定位出Page在文件中的具体位置。

(3)rowid每张表里的每条记录都会有一个唯一的整数id:rowid,这个是用于查找记录的关键key值。

如果建表时创建了integer型主键,该值就作为rowid使用。

如果没有创建,则系统自动生成integer 的rowid,rowid用变长整数来表示。

(4)变长整数变长整数是SQLite的特色之一,它既可以处理大整数,又可以节省存储空间。

sqlite3 后缀 -回复

sqlite3 后缀 -回复

sqlite3 后缀-回复SQLite3 是一种轻量级的嵌入式数据库引擎,广泛应用于移动设备和嵌入式系统中。

它的文件名后缀是 .sqlite3 ,用于标识SQLite3 数据库文件,以区别于其他文件类型。

本文将一步一步回答关于 .sqlite3 后缀的问题,从介绍SQLite3 数据库到解释 .sqlite3 后缀的含义。

第一步:了解SQLite3 数据库SQLite3 是一种开源的嵌入式数据库引擎,它不需要独立的数据库服务器进程,而是将数据库嵌入到应用程序中进行管理和访问。

SQLite3 数据库文件是一个单一的、自包含的文件,包含了整个数据库的结构和数据。

它的设计目标是轻量级、高效、可靠和易于使用。

第二步:介绍 .sqlite3 后缀当我们创建一个SQLite3 数据库时,通常会为数据库文件指定一个文件名,并以 .sqlite3 后缀结尾。

这个后缀是约定俗成的,用于标识文件的类型,告诉操作系统和应用程序该文件是一个SQLite3 数据库文件。

在文件系统中,根据文件名后缀可以方便地区分不同类型的文件,并选择合适的程序来处理。

第三步:SQLite3 数据库文件的组成SQLite3 数据库文件包含了以下几个组成部分:1. 文件头(Header):包含了数据库的一些元信息,如数据库版本号、页大小等。

2. 页(Page):将数据库文件划分为一个个固定大小的数据块。

每个页可以存储表、索引、数据等。

3. 系统表(System Tables):用于存储SQLite3 数据库的元数据,如表、索引、触发器等对象的定义。

4. 用户表(User Tables):用于存储应用程序的业务数据,我们可以在其中创建表、插入数据、查询数据等。

5. 索引表(Index Tables):用于加速表的查询操作,通过创建适当的索引,可以提高查询性能。

6. 事务日志(Transaction Log):用于记录数据修改的日志,当数据库发生异常时,可以通过日志进行恢复。

SQLite(轻量级最佳数据库)原理分析和开发应用

SQLite(轻量级最佳数据库)原理分析和开发应用

SQLite(轻量级最佳数据库)原理分析和开发应⽤概述SQLite介绍⾃⼏⼗年前出现的商业应⽤程序以来,数据库就成为软件应⽤程序的主要组成部分。

正与数据库管理系统⾮常关键⼀样,它们也变得⾮常庞⼤,并占⽤了相当多的系统资源,增加了管理的复杂性。

随着软件应⽤程序逐渐模块模块化,⼀种新型数据库会⽐⼤型复杂的传统数据库管理系统更适应。

嵌⼊式数据库直接在应⽤程序进程中运⾏,提供了零配置(zero-configuration)运⾏模式,并且资源占⽤⾮常少。

SQLite是⼀个开源的嵌⼊式关系数据库,它在2000年由D. Richard Hipp发布,它的减少应⽤程序管理数据的开销,SQLite可移植性好,很容易使⽤,很⼩,⾼效⽽且可靠。

SQLite嵌⼊到使⽤它的应⽤程序中,它们共⽤相同的进程空间,⽽不是单独的⼀个进程。

从外部看,它并不像⼀个RDBMS,但在进程内部,它却是完整的,⾃包含的数据库引擎。

嵌⼊式数据库的⼀⼤好处就是在你的程序内部不需要⽹络配置,也不需要管理。

因为客户端和服务器在同⼀进程空间运⾏。

SQLite 的数据库权限只依赖于⽂件系统,没有⽤户帐户的概念。

SQLite 有数据库级锁定,没有⽹络服务器。

它需要的内存,其它开销很⼩,适合⽤于嵌⼊式设备。

你需要做的仅仅是把它正确的编译到你的程序。

架构(architecture)SQLite采⽤了模块的设计,它由三个⼦系统,包括8个独⽴的模块构成。

接⼝(Interface)接⼝由SQLite C API组成,也就是说不管是程序、脚本语⾔还是库⽂件,最终都是通过它与SQLite交互的(我们通常⽤得较多的ODBC/JDBC 最后也会转化为相应C API的调⽤)。

编译器(Compiler)在编译器中,分词器(Tokenizer)和分析器(Parser)对SQL进⾏语法检查,然后把它转化为底层能更⽅便处理的分层的数据结构---语法树,然后把语法树传给代码⽣成器(code generator)进⾏处理。

SQLite数据库利用详解程序

SQLite数据库利用详解程序

1.SQLite数据库的优势:1.1 轻量级SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,利用SQLite一样只需要带上它的一个动态库。

以版本为例,Windows下487KB、Linux下347KB。

1.2 绿色软件它的核心引擎本身不依托第三方的软件1.3 单一文件确实是数据库中所有的信息(比如表、视图、触发器、等)都包括在一个文件内。

那个文件能够copy到其它目录或其它机械上,也照用不误。

CSV也是单一文件格式。

它本身确实是用来表示二维的数据信息的。

一个CSV文件能够明白得为数据库的一张表。

CSV的缺点要紧在于:不便于存储非文本的数据信息(比如BLOB类型的信息);若是需要同时存储多张表的信息,就需要对应有多个CSV文件(文件一多,就嫌麻烦)。

1.4 跨平台/可移植性除主流操作系统,SQLite还支持了很多其他的操作系统。

如对很多嵌入式系统(比如Android、Windows Mobile、Symbin、Palm、VxWorks等)的支持。

Access数据库最要紧的缺点确实是不能跨平台。

另外还有几个小缺点:文件大小有限制(2GB)、不支持内存数据库。

1.5 内存数据库(in-memory database)现在内存愈来愈廉价,很多一般PC都开始以GB为单位来衡量内存(效劳器就更甭提了)。

这时,SQLite的内存数据库特性就越发显得好用。

SQLite的API不区分当前操作的数据库是在内存仍是在文件(关于存储介质是透明的)。

因此若是你感觉磁盘I/O有可能成为瓶颈的话,能够考虑切换为内存方式。

切换的时候,操作SQLite的代码大体不用大改,只要在开始时把文件Load到内存,终止时把内存的数据库Dump回文件就OK了。

1.6 编程语言接口由于SQLite本身是C写的,它自带的API也是C接口的。

2.SQLite数据库的缺点:2.1并发访问的锁机制SQLite在并发(包括多进程和多线程)读写方面的性能不太理想。

SQLITE源码分析

SQLITE源码分析

SQLITE源码分析SQLite是一个轻量级的关系型数据库管理系统,它的源码可以用C 语言编写。

在进行SQLite源码分析时,需要了解以下几个主要方面:1. 数据库文件格式:SQLite的数据存储在一个单一的文件中,文件中包含了一个或多个表格,每个表格又包含多个行和列。

文件格式采用了一种称为B树的数据结构,它能够高效地进行数据的插入、删除和查找操作。

2. 内存管理:SQLite使用了自己的内存管理系统,它通过使用一个称为“mem5”的内存分配器来管理内存。

这个内存分配器可以将整个虚拟内存空间划分为多个固定大小的块,以降低内存碎片化的程度,提高内存分配的效率。

3. SQL解析和优化:SQLite使用了一个称为Lemon的工具来生成SQL解析器。

Lemon根据输入的语法规则生成一个状态机,并根据状态机解析输入的SQL语句。

一旦SQL语句被解析成功,SQLite会进行一系列的优化操作,例如重写查询计划、生成执行计划等。

4. 查询执行:SQLite的查询执行主要包括四个阶段:编译、优化、执行和返回结果。

编译阶段主要负责将SQL语句进行解析和编译成一个执行计划。

优化阶段对执行计划进行一系列的优化操作,例如选择最佳的索引、重写查询计划等。

执行阶段负责执行编译和优化生成的执行计划,并将结果返回给调用者。

5. 事务处理:SQLite支持ACID事务,它使用一个称为WAL(Write-Ahead-Logging)的机制来实现事务的持久化。

WAL允许多个读操作和一个写操作并发地访问数据库,从而提高了多用户并发访问数据库的效率。

总结来说,SQLite的源码分析涉及数据库文件格式、内存管理、SQL 解析和优化、查询执行和事务处理等多个方面。

在分析源码时,可以从这些方面入手,深入了解SQLite的工作原理和实现细节。

同时,由于SQLite源码较为庞大和复杂,建议阅读相关的文档和资料,以提高分析效率和理解深度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SQLite数据库文件分析前言性急的兄弟可以跳过前言直接看第1章,特别性急的兄弟可以跳过前面各章,直接看鸣谢。

最近对SQLite数据库很感兴趣,认真地学了有半个多月了,越学越觉着好玩。

好玩归好玩,只是目前没什么实际用途,那就写点儿东西吧,否则半个月不是白学了嘛!SQLite数据库包括多方面的知识,比如VDBE什么的。

据说那些东西会经常变。

确实,我用的是3.6.18版,我看跟其它文档中描述的3.3.6的VDBE已经很不一样了。

所以决定先写文件格式,只要是3.?.?的版本,文件格式应该不会有太大变化吧。

网上介绍SQLite文件格式的文章并不少,但一般都是针对小文件:一个表,几条记录,两个页。

本文准备一直分析到比较大的文件,至少B-tree和B+tree中得有内结点(就是说不能只有一个既是根又是叶的结点,就是说表中得多点记录,得建索引),还要争取对SQLite 的各类页都做出分析。

在分析的过程中,争取把SQLite数据库关于文件格式的基本规定也都介绍一下。

这样,本文既是一个综合性的技术文档,又带有实例说明,兄弟们参考时岂不是就很方便了吗?既然是技术文档,要想读懂总得先掌握点SQLite数据库的基本知识吧。

所以,先介绍参考文献。

0.1 参考文献1-The Definitive Guide to SQLite . Michael Owens:据说是比较经典的SQLite著作,我看写得是挺好的。

边看边翻译了其中的主要部分,但不敢拿出来,大家还是看原文吧。

2-SQLite源代码:其实有关SQLite的最原始说明可能都在源代码中了。

把此项列在第2,只是因为我是先看的书再看的代码,估计大家也会是这个顺序吧。

先浏览一下代码还是很有收获的,特别是几个主要的.h文件,对本文的写作很有帮助。

有关文件格式的说明主要在btreeInt.h中。

3-SQLite入门与分析:网上Arrowcat的系列文章。

Arrowcat应该是一个很博学的人,看他的文章收获很大,在此也算是鸣谢吧。

4-SQLite . Chris Newman:我没看,因为也是网上能够下载到的重要资源,所以也在此列出。

看目录内容应该比参考文献1简单一些,但出版日期也更早了一些。

5-NULL:在网上搜了半天,国内为什么就没有关于SQLite的好书呢?6- /fileformat.html:如果这篇文章看懂了,其实我这篇东西根本就不用再看了。

这是介绍SQLite文件格式的权威文档,列在最后,是因为我也是写完这篇东西后才看到的。

该文档由SQLite官方网站提供,当初没看,一是因为上网少,还没仔细浏览人家的网站就开始干了(太激动),其实归根结蒂还是因为英语不好。

看到此文档这后还敢把我的东西发出来,有两个原因:一、为其他英语比我强不了多少的兄弟提供一点方便,二、我这里有例子,看起来更形象一些吧。

0.2 术语这里不集中讨论大量术语了,那样显得太正式,还真成“文章”了。

绝大多数术语都是在出现时再进行简单解释,但还是有个别概念需要先说明清楚,比如:(1) Btree、B-tree和B+tree:Btree是为磁盘存储而优化了的一种树结构,其一般性说明可参考各类《数据结构》教材。

根据实现方法的不同,Btree又分为很多类型。

在SQLite中,存储表数据用的是B+tree,存储表索引用的是B-tree。

由于历史原因,SQLite在3.0版以前只使用B-tree,从3.0版开始,才对表数据使用了B+tree。

因此,在SQLite的官方文档中,有时B-tree表示存储表索引的B-tree,有时又是两种Btree的统称。

本文中将两种Btree的概念加以了区分,而将Btree作为两种树的统称,这是与SQLite官方文档及当前大多数SQLite介绍性文档相区别的地方。

(2) auto-vacuum数据库:一般情况下,当一个事务从数据库中删除了数据并提交后,数据库文件的大小保持不变。

即使整页的数据都被删除,该页也会变成“空闲页”等待再次被使用,而不会实际地被从数据库文件中删除。

执行vacuum操作,可以通过重建数据库文件来清除数据库内所有的未用空间,使数据库文件变小。

但是,如果一个数据库在创建时被指定为auto_vacuum数据库,当删除事务提交时,数据库文件会自动缩小。

使用auto_vacuum数据库可以节省空间,但却会增加数据库操作的时间,有利有弊。

Auto_vacuum数据库需要使用附加的格式,如指针位图页,本文只讨论非auto_vacuum数据库。

(3) 数据库映像、数据库文件和日志文件:“数据库映像”是SQLite数据库的磁盘映像。

SQLite数据库存储在单一的“数据库文件”中。

一般情况下,数据库映像和数据库文件是一致的,可以理解为数据库映像就是数据库文件的内容,但有例外。

如果事务对数据库进行了修改,这些修改会暂存在“日志文件”中,此时可以认为数据库映像分布在数据库文件和日志文件两个文件中。

日志文件有自己的格式,本文不涉及。

(4) SQLite的当前版本:我写这篇东西时,SQLite的当前版本为3.6.18。

等我写完时,已经变成3.6.19了,文件格式没变。

1小文件的分析1.1 准备数据库执行SQLite的命令行工具,创建一个新的数据库food_test.db。

D:\SQLite\CLP>sqlite3 foods_test.db创建一个新表。

CREATE TABLE foods(id integer primary key,type_id integer,name text );插入2条记录。

INSERT INTO "foods" V ALUES(1, 1, 'Bagels');INSERT INTO "foods" V ALUES(2, 1, 'Bagels, raisin');退出命令行工具。

当前目录下多了一个文件foods_test.db,大小为2K。

现在,就可以用UltraEdit或WinHex之类的软件对其进行分析了。

1.2 SQLite文件格式SQLite有3类数据库。

除内存数据库外,SQLite把每个数据库(main或temp)都存储到一个单独的文件中。

SQLite数据库文件由固定大小的“页(page)”组成。

页的大小可以在512~32768之间(包含这两个值,必须是2的指数),默认大小为1024个字节(1KB)。

页大小可以在数据库刚刚创建时设置,一旦创建了数据库对象之后,这个值就不能再改变了。

数据库中所有的页从1开始顺序编号。

在具体的实现中,页号用4字节来表示(但我没搞清是否有符号位)。

文件的第1个页被称为page 1,第2个页被称为page 2,依此类推。

编号为0的页表示“无此页”。

页的类型可以是:Btree页、空闲(free)页或溢出(overflow)页。

Btree又可以是B-tree或B+tree,每一种树的结点又区分为内部页和叶子页。

一个数据库文件中可能没有空闲页或溢出页,但必然有Btree页。

关于Btree页的格式规定是SQLite数据库的核心内容,本文的前半部分都是在介绍Btree页。

注:其实SQLite还有两种页。

一种称为“锁页(locking page)”。

只有1页,位于数据库文件偏移为1G开始的地方,如果文件不足1G,就没有此页。

该页是用于文件加锁的区域,不能存储数据(参源代码io.h)。

好在,如果只是读数据,即使文件大于1G,也不会有指针指向此页,因此下面我们就不再提它了。

另一种称为“指针位图页(pointer-map page)”,这类页用于在auto-vacuum的数据库中存储元数据。

本文不涉及auto-vacuum数据库,也就不讨论这种页了。

从逻辑上来说,一个SQLite数据库文件由多个多重Btree构成。

每个Btree存储一个表的数据或一个表的索引,索引采用B-tree,而表数据采用B+tree,每个Btree占用至少一个完整的页,每个页是Btree的一个结点。

每个表或索引的第1个页称为根页,所有表或索引的根页编号都存储在系统表sqlite_master中,表sqlite_master的根页为page 1。

注:sqlite_master是一个系统表,保存了数据库的schema信息,详参“关于sqlite_master 表”一节。

数据库中第一个页(page 1)永远是Btree页。

Page 1的前100个字节是一个对数据库文件进行描述的“文件头”。

它包括数据库的版本、格式的版本、页大小、编码等所有创建数据库时设置的永久性参数。

关于这个特殊文件头的文档在btreeInt.h中,具体格式如下:偏移量大小说明0 16 头字符串,如果不改源程序,此字符串永远是"SQLite format 3"。

16 2 页大小(以字节为单位)。

18 1 文件格式版本(写)。

对于SQLite的当前版本,此值为1。

如果该值大于1,表示文件为只读。

SQLite将来版本对此域的规定可能改变。

19 1 文件格式版本(读)。

对于SQLite的当前版本,此值为1。

如果该值大于1,SQLite认为文件格式错,拒绝打开此文件。

SQLite将来版本对此域的规定可能改变。

20 1 每页尾部保留空间的大小。

(留作它用,默认为0。

)21 1 Btree内部页中一个单元最多能够使用的空间。

255意味着100%,默认值为0x40,即64(25%),这保证了一个结点(页)至少有4个单元。

22 1 Btree内部页中一个单元使用空间的最小值。

默认值为0x20,即32(12.5%)。

23 1 Btree叶子页中一个单元使用空间的最小值。

默认值为0x20,即32(12.5%)。

注:SQLite的当前版本规定21~23的3个字节值只能是0X402020。

原来这3个字节值是可变的,从3.6.0版开始被固定下来了。

24 4 文件修改计数,通常被事务使用,由事务增加其值。

SQLite用此域的值验证内存缓冲区中数据的有效性。

28 4 未使用。

32 4 空闲页链表首指针。

参“空闲页”一节。

36 4 文件内空闲页的数量。

40 60 15个4字节的元数据变量。

从偏移40开始的15个4字节元数据变量在btreeInt.h中的定义如下:40 4 Schema版本:每次schema改变(创建或删除表、索引、视图或触发器等对象,造成sqlite_master表被修改)时,此值+1。

44 4 File format of schema layer:当前允许值为1~4,超过此范围,将被认为是文件格式错。

48 4 Size of page cache。

52 4 Largest root-page (auto/incr_vacuum):对于auto-vacuum数据库,此域为数据库中根页编号的最大值,非0。

相关文档
最新文档