简介
SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都使用了 SQLite.
SQLite 由以下几个组件组成:SQL 编译器、内核、后端以及附件。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。
Android 在运行时(run-time)集成了 SQLite,语言接口不使用jdbc而是自己提供api
编译与集成
下载合并包https://www.sqlite.org/download.html
四文件:版本3.28.0
- shell.c:用于编译命令行程序
- sqlite3.c:数据库全部实现
- sqlite3.h:头接口文件
- sqlite3ext.h:扩展
添加进VS或直接使用命令行cl编译即可。
使用:
把sqlite3.h、sqlite3ext.h复制到工程目录下,并添加到工程项目中
把sqlite3.lib复制到工程目录下
在cpp文件中加入#pragma comment(lib, “sqlite3.lib”)即可通知编译器链接,这个是VS工具链特有的,gcc下请使用Makefile
代码使用
文档:
https://sqlite.org/cintro.html
https://sqlite.org/c3ref/intro.html
SQLite支持3种线程模式:
单线程:这种模式下,没有进行互斥,多线程使用不安全。禁用所有的mutex锁,并发使用时会出错。
多线程:这种模式下,只要一个数据库连接不被多个线程同时使用就是安全的。可以一个线程用一个句柄。
串行:sqlite是线程安全的。启用所有的锁。
默认是串行的,在编译、运行时都可以更改。
常用的三个接口:
函数返回值表示操作是否正确,如果是SQLITE_OK则表示操作正常。相关的返回值sqlite定义了一些宏。具体这些宏的含义可以参考sqlite3.h 文件。里面有详细定义
核心就是sqlite3_exec了。
用于执行sql语句
参数:数据库句柄、sql语句、回调函数(语句执行后执行)、传递给回调的数据、返回错误信息(将提供的指针指向错误信息)
回调函数:
剩下就是命令式的sql语句使用了,按照标准的sql语句实现的。
源码简单分析
除了上层的词法分析、语法分析外,还有一层虚拟机,我个人理解是用于屏蔽事务、数据库管理等提供的顺序操作执行器。
之后是一颗b树、页面缓存与OS接口
这里简单介绍下b树,不同于AVL与红黑,b树一个节点可以有大于等于2个的子节点。插入时若当前同一父下子节点达到临界值,则分列成俩个并提中间向上,因此树是从下至上成长的。