Android 数据库开发SQLite3概述
Posted 刘望舒
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 数据库开发SQLite3概述相关的知识,希望对你有一定的参考价值。
前言
SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目,设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在android、ios等移动操作系统中的数据库实现也是使用的SQLite3。对于Android开发者来说数据库并不算很好维护,所以深入了解SQLite数据库也变得很有必要,本文就来先介绍下SQLite3。
1.SQLite3简单介绍
SQLite并不是一个独立的进程,而是作为程序的一部分,应用程序经由编程语言内的API直接调用SQLite,这能有效的减少数据库访问的延迟,因为在一个进程中调用函数要比跨进程通信更有效率。SQLite将整个数据库作为一个单独的、可跨平台的文件存储再主机中,它采用了再写入数据时将整个数据库文件加锁的简单的设计,尽管写操作只能串行进行,但SQLite的读操作可以多任务同时进行。
程序库实现了多数的SQL-92标准,包括事务以及实现原子性、一致性、隔离性和持久性,但它缺失了某些特性,例如它仅部分支持触发器: 支持 FOR EACH ROW 触发器,但不支持 FOR EACH STATEMENT 触发器。尽管它支持大多数复杂查询,但它的ALTER TABLE 功能有所限制:只能添加和重命名列,不能修改或者删除列。因此,当需要修改或者删除列名时只能重新创建表。
2. 为什么要用 SQLite
- 不需要一个单独的服务器进程或操作的系统(无服务器的);
- 不需要配置,这意味着不需要安装或管理;
- 非常小,是轻量级的,完全配置时小于 400KiB,省略可选功能配置时小于250KiB;
- 自给自足的,这意味着不需要任何外部的依赖;
- 支持 SQL92(SQL2)标准的大多数查询语言的功能。 SQLite 使用 ANSI-C 编写的,并提供了简单和易于使用的 API;
- 支持数据库大小至2TB;
- 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中运行。
3. SQLite的系统架构
SQLite采用了模块的设计,它由三个子系统,包括8个独立的模块构成;模块将复杂的查询过程分解为细小的工作进行处理。
如上图所示,sqlite主要由7个构件子系统(也就是模块)组成,这些模块被分割为两个部分:
前端解析系统和后端引擎。
前端解析系统
前端预处理应用程序传递过来的SQL语句和SQLite命令,对获取的编码分析,优化,并转换 为后端能够执行的SQLite内部字节编码。前端可分为三个模块:
词法分析器(Tokenizer)
将输入的SQL语句分成标识符,并把这些标示符传递给解析器;语法分析器(Parser)
解析器分析通过标识器产生的标识分析语句的结构,并且得到一颗语法树。解析器同时也包含了重构语法树的优化器,因此能够找到一颗产生一个高效的字节编码程序的语法树。- 代码生成器(Code Generator)
语法分析器再把标示符组装成完整的SQL语句后,调用代码生成器产生虚拟机代码,以执行SQL语句的请求作用。
后端引擎
后端是用来解释字节编码程序的引擎,该引擎做的才是真正的数据库处理工作。后端部分由四个模块组成:
虚拟机(VM)
VM模块是一个内部字节编码语言的解释器。它通过执行字节编码语句来实现SQL语句的工作。它是数据库中数据的最终的操作者。它把数据库看成表和索引的集合,而表和索引则是一系列的元组或者记录。B/B+树
B/B+树模块把每一个元组集组织进一个一次排好序的树状数据结构中,表和索引被分别置于单独的B+和B树中。该模块帮助VM进行搜索,插入和删除树中的元组。它也帮助VM创建新的树和删除旧的树。页面调度程序(pager)
页面调度程序模块在原始文件的上层实现了一个面向页面的数据库文件抽象。它管理B/B+树使用的内存内缓存(数据库页的),另外,他也管理文件的锁定,并用日志来实现事物的ACID属性。操作系统交界面(system interface)
操作系统界面模块提供了对应于不同本地操作系统的统一交界面。
以上是关于Android 数据库开发SQLite3概述的主要内容,如果未能解决你的问题,请参考以下文章
如何将SQLite3 创建的数据库与android 程序连接
adb命令具体解释——手机缺失sqlite3时操作数据库的多种解决方式