Linux--sqlite3数据库

本文介绍SQLite轻量级数据库的特点与局限性,包括零配置、轻量化、跨平台等优势,以及与MySQL相比的功能差异。探讨了数据类型、语句及C/C++接口,如sqlite3_open、sqlite3_exec和sqlite3_close函数的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的基本数据类型。

数据类型描述
NULLNULL值
INTEGER带符号整数,按值的大小选择不同大小的字节存储
REAL浮点数,8字节
TEXT文本字符串,可存储时间日期
BLOBblob类型,按输入类型存储

sqlite语句

创建数据库,创建表,查询数据,插入数据,删除数据等操作与MySQL基本一样,除了前面提到的限制性和内置函数有区别。
列举几个常用的细节操作:

  1. CREATE TABLE IF NOT EXIST 表名(***),避免重复创建相同的表;
  2. select、delete操作后面加limit,限制操作的范围;
  3. 使用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数组中存储查询到的第一行四列数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值