sqlite简介
特点:
- 零配置,不需要各种管理配置;
- 轻量化,几百KB空间就足够运行;
- 跨平台,依赖于磁盘文件;
- 无依赖,源码不依赖任何外部库,只有一个c文件就可以编译;
- 多进程/多线程安全,多进程/多线程访问不需要上锁;
局限性:
轻量化数据库,功能没有MySQL的多,但是实现了大部分常用功能。
特性 | 描述 |
---|---|
RIGHT OUTER JOIN | 只实现了LEFT OUTER JOIN |
FULL OUTER JOIN | 只实现了LEFT OUTER JOIN |
ALTER TABLE | 支持 RENAME TABLE 和 ALTER TABLE 的 ADD COLUMN variants 命令,不支持 DROP COLUMN、ALTER COLUMN、ADD CONSTRAINT |
Trigger 支持 | 支持 FOR EACH ROW 触发器,但不支持 FOR EACH STATEMENT 触发器 |
VIEWs | 在 SQLite 中,视图是只读的。您不可以在视图上执行 DELETE、INSERT 或 UPDATE 语句 |
GRANT 和 REVOKE | 依赖于文件,只有文件权限 |
sqlite数据类型:
sqlite只有基本的数据类型,但是与MySQL数据类型有亲和类型,MySQL所有数据类型基本都可以与sqlite亲和,这里只列举sqlite的基本数据类型。
数据类型 | 描述 |
---|---|
NULL | NULL值 |
INTEGER | 带符号整数,按值的大小选择不同大小的字节存储 |
REAL | 浮点数,8字节 |
TEXT | 文本字符串,可存储时间日期 |
BLOB | blob类型,按输入类型存储 |
sqlite语句
创建数据库,创建表,查询数据,插入数据,删除数据等操作与MySQL基本一样,除了前面提到的限制性和内置函数有区别。
列举几个常用的细节操作:
CREATE TABLE IF NOT EXIST 表名(***),避免重复创建相同的表;
select、delete操作后面加limit,限制操作的范围;
使用date、time、datetime、strftime函数可以获取到系统时间,为数据库数据加上时间后缀
sqlite 的c/c++接口:
函数 | 描述 |
---|---|
sqlite3_open(const char *filename, sqlite3 **ppDb) | 该例程打开一个指向 SQLite 数据库文件的连接,返回一个用于其他 SQLite 程序的数据库连接对象。如果 filename 参数是 NULL 或 ‘:memory:’,那么 sqlite3_open() 将会在 RAM 中创建一个内存数据库,这只会在 session 的有效时间内持续。如果文件名 filename 不为 NULL,那么 sqlite3_open() 将使用这个参数值尝试打开数据库文件。如果该名称的文件不存在,sqlite3_open() 将创建一个新的命名为该名称的数据库文件并打开。 |
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg) | 该例程提供了一个执行 SQL 命令的快捷方式,SQL 命令由 sql 参数提供,可以由多个 SQL 命令组成。 在这里,第一个参数 sqlite3 是打开的数据库对象,sqlite_callback 是一个回调,data 作为其第一个参数,errmsg 将被返回用来获取程序生成的任何错误。 sqlite3_exec() 程序解析并执行由 sql 参数所给的每个命令,直到字符串结束或者遇到错误为止。 |
sqlite3_close(sqlite3*) | 该例程关闭之前调用 sqlite3_open() 打开的数据库连接。所有与连接相关的语句都应在连接关闭之前完成。 |
sqlite_exec()函数中有个callback回调函数,一般用于查询数据库时接收查询结果,其格式如下:
int sqlite_callback(
void* pv, /* 由 sqlite3_exec() 的第四个参数传递而来 */
int argc, /* 表的列数 */
char** argv, /* 指向查询结果的指针数组, 可以由 sqlite3_column_text() 得到 */
char** col /* 指向表头名的指针数组, 可以由 sqlite3_column_name() 得到 */
);
回调函数名称可自定义,使用时传入函数指针,每执行一次SQL语句,sqlite_exec()函数都根据回调函数地址调用回调函数,回调函数中的pv参数来自sqlite_exec()函数第四个参数,可用来接收查询结果。
如下,可用于在sqlite_exec()函数传入的pv数组中存储查询到的第一行四列数据