SQLite3是一种轻量级的关系型数据库管理系统(RDBMS),它以跨平台、零配置、服务器-less的方式存储数据。
SQLite3不像其他常见的数据库管理系统,如MySQL或PostgreSQL那样需要一个独立的服务器进程,在应用程序内部直接操作文件来进行数据存储和读取。
SQLite3非常适合于嵌入式设备和单机应用程序等场景,因为它不需要占用太多资源,也允许在不同的平台上运行。 此外,SQLite3支持大多数SQL语法,并且还提供了一些高级功能,如触发器、存储过程等。
SQLite3的特性和优势:
跨平台性:SQLite3可以在多种操作系统和编程语言下使用,包括Windows、Linux、macOS、iOS、Android等。
零配置:SQLite3的特点之一是不要求任何服务器或网络配置。只需将数据库文件嵌入应用程序即可轻松地访问数据。
体积小:SQLite3的核心库非常小,通常只有几百KB,因此非常适合在资源受限或空间受限的系统中使用。
支持SQL:SQLite3支持大多数标准SQL查询语言,使用户能够使用大多数传统数据库管理任务。 ACID兼容:SQLite3支持ACID(原子性、一致性、隔离性和持久性)事务处理,确保数据始终处于一致状态。
高可靠性:SQLite3对于频繁读取和少量更新的场景,表现出色。由于其自动记录更改,以防止损坏和数据丢失。
强大的API:SQLite3提供了一个简单易用的C语言API来操作数据库,同时也提供了大量的接口和工具。
可扩展性:SQLite3允许用户创建自己的函数和存储过程,从而增加了其灵活性和可扩展性。
安装sqlite3
sudo apt-get update
sudo apt-get install sqlite3
安装sqlite3依赖库
sudo apt-get install libsqlite3-dev
sqlite3中以'.'开头的相关命令:
| 命令 | 说明 |
|---|---|
| .archive ... | 管理SQL归档文件 |
| .auth ON|OFF | 显示授权回调函数 |
| .backup ?DB? FILE | 将数据库DB(默认为"main")备份到FILE |
| .bail on|off | 在错误发生后停止。默认为OFF |
| .binary on|off | 打开或关闭二进制输出。默认为OFF |
| .cd DIRECTORY | 将工作目录更改为DIRECTORY |
| .changes on|off | 显示SQL更改的行数 |
| .check GLOB | 如果自从.testcase以来的输出不匹配,则失败 |
| .clone NEWDB | 从现有数据库克隆数据到NEWDB中 |
| .databases | 列出附加数据库的名称和文件 |
| .dbconfig ?op? ?val? | 列出或更改sqlite3_db_config()选项 |
| .dbinfo ?DB? | 显示有关数据库的状态信息 |
| .dump ?TABLE? ... | 将所有数据库内容呈现为SQL |
| .echo on|off | 打开或关闭命令回显 |
| .eqp on|off|full|... | 启用或禁用自动EXPLAIN QUERY PLAN |
| .excel | 在电子表格中显示下一个命令的输出 |
| .exit ?CODE? | 以返回代码CODE退出此程序 |
| .expert | 实验性功能。为查询建议索引 |
| .explain ?on|off|auto? | 更改EXPLAIN格式模式。默认值:auto |
| .filectrl CMD ... | 运行各种sqlite3_file_control()操作 |
| .fullschema ?--indent? | 显示模式和sqlite_stat表的内容 |
| .headers on|off | 打开或关闭标题的显示 |
| .help ?-all? ?PATTERN? | 显示有关PATTERN的帮助文本 |
| .import FILE TABLE | 将数据从FILE导入TABLE |
| .imposter INDEX TABLE | 在索引INDEX上创建仿冒表TABLE |
| .indexes ?TABLE? | 显示索引的名称 |
| .limit ?LIMIT? ?VAL? | 显示或更改SQLITE_LIMIT的值 |
| .lint OPTIONS | 报告潜在的模式问题。 |
| .load FILE ?ENTRY? | 加载扩展库 |
| .log FILE|off | 打开或关闭日志记录。文件可以是stderr/stdout |
| .mode MODE ?TABLE? | 设置输出模式 |
| .nullvalue STRING | 在NULL值的位置使用字符串STRING |
| .once (-e|-x|FILE) | 仅将下一个SQL命令的输出发送到FILE |
| .open ?OPTIONS? ?FILE? | 关闭现有数据库并重新打开FILE |
| .output ?FILE? | 将输出发送到FILE,如果省略FILE,则发送到stdout |
| .parameter CMD ... | 管理SQL参数绑定 |
| .print STRING... | 打印文本字符串STRING |
| .progress N | 在每个N操作码后调用进度处理程序 |
| .prompt MAIN CONTINUE | 替换标准提示符 |
| .quit | 退出此程序 |
| .read FILE | 从FILE读取输入 |
| .recover | 尝试从损坏的数据库中恢复尽可能多的数据。 |
| .restore ?DB? FILE | 从FILE还原数据库DB(默认为"main")的内容 |
| .save FILE | 将内存中的数据库写入FILE |
| .scanstats on|off | 打开或关闭sqlite3_stmt_scanstatus()指标 |
| .schema ?PATTERN? | 显示与PATTERN匹配的CREATE语句 |
| .selftest ?OPTIONS? | 运行在SELFTEST表中定义的测试 |
| .separator COL ?ROW? | 更改列和行分隔符 |
| .session ?NAME? CMD ... | 创建或控制会话 |
| .sha3sum ... | 计算数据库内容的SHA3哈希值 |
| .shell CMD ARGS... | 在系统Shell中运行CMD ARGS... |
| .show | 显示各种设置的当前值 |
| .stats ?on|off? | 显示统计信息或打开/关闭统计信息 |
| .system CMD ARGS... | 在系统Shell中运行CMD ARGS... |
| .tables ?TABLE? | 列出LIKE模式为TABLE的表名 |
| .testcase NAME | 开始将输出重定向到"testcase-out.txt" |
| .testctrl CMD ... | 运行各种sqlite3_test_control()操作 |
| .timeout MS | 尝试以MS毫秒为间隔打开已锁定表 |
| .timer on|off | 打开或关闭SQL计时器 |
| .trace ?OPTIONS? | 在每个SQL语句执行时输出 |
| .vfsinfo ?AUX? | 有关顶级VFS的信息 |
| .vfslist | 列出所有可用的VFS |
| .vfsname ?AUX? | 打印VFS堆栈的名称 |
| .width NUM1 NUM2 ... | 设置" column"模式的列宽度 |
创建表格
CREATE TABLE table_name (
column_1 data_type constraints,
column_2 data_type constraints,
...,
column_n data_type constraints
);
删除表格
DROP TABLE table_name;
查询数据
SELECT column_1, column_2, ..., column_n
FROM table_name;
插入数据
INSERT INTO table_name (column_1, column_2, ..., column_n)
VALUES (value_1, value_2, ..., value_n);
更新数据
UPDATE table_name
SET column_1 = value_1, column_2 = value_2, ..., column_n = value_n
WHERE condition;
删除数据
DELETE FROM table_name WHERE condition;
打开一个 SQLite 数据库文件:
int sqlite3_open(
const char *filename, /* 数据库文件的文件名,如果为 ":memory:" 则表示创建内存中数据库 */
sqlite3 **ppDb /* 返回指向数据库连接句柄的指针 */
);
关闭指定数据库连接:
int sqlite3_close(sqlite3*);
在 SQLite 数据库连接上执行一条或多条 SQL 语句,并调用一个回调函数处理执行结果:
int sqlite3_exec(
sqlite3*, /* 执行 SQL 命令的数据库连接 */
const char *sql, /* 待执行的 SQL 命令 */
int (*callback)(void*,int,char**,char**), /* 在执行命令时的回调函数 */
void *, /* 作为第一个参数传递给回调函数的指针 */
char **errmsg /* 用于存储错误消息的指针 */
);
int (*callback)(void*, int, char**, char**);
第一个参数 void*,是使用者传递给 sqlite3_exec() 调用的 void* 参数。
第二个参数 int,是查询结果所返回的列数。
第三个参数 char**,是包含每个结果集元素值的字符串数组。
第四个参数 char**,是包含每个结果集元素的列名称的字符串数组。这通常会在 SELECT 语句中返回。