目录
[三、常用 SQL 语句](#三、常用 SQL 语句)
[1. 创建表](#1. 创建表)
[2. 删除表](#2. 删除表)
[3. 插入数据](#3. 插入数据)
[4. 查询数据](#4. 查询数据)
[5. 修改数据](#5. 修改数据)
[6. 删除数据](#6. 删除数据)
[7. 时间列](#7. 时间列)
[8. 自动增长列](#8. 自动增长列)
[9. 数据导入导出](#9. 数据导入导出)
[四、SQLite3 C 语言编程](#四、SQLite3 C 语言编程)
[1. 打开 / 创建数据库](#1. 打开 / 创建数据库)
[2. 执行 SQL 语句](#2. 执行 SQL 语句)
[3. 关闭数据库](#3. 关闭数据库)
一、嵌入式数据库特点
- 轻量级、体积小,无需独立服务进程
- 单文件存储,便于移植、嵌入设备
- 支持标准 SQL 语法,使用简单
- 资源占用低,适合嵌入式、移动端场景
- 无复杂配置,开箱即用
二、数据库基本使用与常用指令
- 进入数据库:sqlite3 数据库名.db
- 查看数据库:.databases
- 查看所有表:.tables
- 查看表结构:.schema 表名
- 显示列名称:.headers on
- 退出数据库:.quit/.exit
三、常用 SQL 语句
1. 创建表
CREATE TABLE 表名(
字段名 类型 约束,
字段名 类型 约束
);
2. 删除表
DROP TABLE 表名;
3. 插入数据
INSERT INTO 表名(字段1,字段2) VALUES(值1,值2);
INSERT INTO 表名 VALUES(全部值);
4. 查询数据
cs
SELECT * FROM 表名;
SELECT 字段1,字段2 FROM 表名 WHERE 条件;
通配符:
select * from user where name like '张_' and id <5;
select * from user where name like '张%' and id <5;
5. 修改数据
UPDATE 表名 SET 字段=值 WHERE 条件;
6. 删除数据
cs
delete from 表名; //删除表中所有数据
DELETE FROM 表名 WHERE 条件;
7. 时间列
cs
CREATE TABLE 表名(id int,name char,age int,dt datetime);
insert into 表名 values (2,'张三',23,datetime('now','+8 hours')); //换成中国时间
8. 自动增长列
id INTEGER PRIMARY KEY AUTOINCREMENT
9. 数据导入导出
- 导出:.output 文件名.sql → .dump → .output stdout
- 导入:.read 文件名.sql
四、SQLite3 C 语言编程
1. 打开 / 创建数据库
int sqlite3_open(const char *filename, sqlite3 **ppDb);

2. 执行 SQL 语句
int sqlite3_exec(
sqlite3 *db,
const char *sql,
int (*callback)(void*,int,char**,char**),
void *arg,
char **errmsg
);

3. 关闭数据库
int sqlite3_close(sqlite3 *db);

核心流程
打开数据库 → 执行 SQL(增删改查)→ 关闭数据库
五、代码示例:
实现把单词字典dict里的单词和词义输进表中。
cs
#include <fcntl.h>
#include <sqlite3.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
void exec(sqlite3 *db, char sql_cmd[512])
{
char *errmsg = NULL;
//执行sql语句
int ret = sqlite3_exec(db, sql_cmd, NULL, NULL, &errmsg);
if (ret != SQLITE_OK)
{
fprintf(stderr, "sqlite3_exec sql_cmd:[%s],%s\n", sql_cmd, errmsg);
sqlite3_free(errmsg);
sqlite3_close(db);
return;
}
}
int main(int argc, char **argv)
{
//定义保存SQLite数据库连接的句柄
sqlite3 *db = NULL;
//打开数据库,获得数据的句柄
int ret = sqlite3_open("01.db", &db);
if (ret != SQLITE_OK)
{
fprintf(stderr, "open db error %s\n", sqlite3_errstr(ret));
sqlite3_close(db);
return 1;
}
//创建表
//需要执行的SQL语句
char sql_cmd[512] = "create table if not exists dict(id INTEGER PRIMARY KEY ASC,word char,mean char)";
exec(db, sql_cmd);
//清空表
bzero(sql_cmd, sizeof(sql_cmd));
strcpy(sql_cmd, "delete from dict");
exec(db, sql_cmd);
// 为了提高效率,批量操作 ,开启事务
bzero(sql_cmd, sizeof(sql_cmd));
strcpy(sql_cmd, "BEGIN TRANSACTION;");
exec(db, sql_cmd);
// 直接用标准IO打开字典文件
FILE *fp = fopen("/home/linux/dict.txt", "r");
if (fp == NULL)
{
perror("fopen dict.txt failed"); // 打印打开失败原因
sqlite3_close(db); // 打开文件失败也要关闭数据库
return 1;
}
while (1)
{
char linebuf[1024] = {0};
if (fgets(linebuf, sizeof(linebuf), fp) == NULL)
{
break;
}
char *word = strtok(linebuf, " ");
char *mean = strtok(NULL, "\r");
//表内插入word,mean
sprintf(sql_cmd, "insert into dict values(NULL,\"%s\",\"%s\");", word, mean);
//执行sql语句
exec(db, sql_cmd);
}
// 提交事务 ,相当于保存文件
bzero(sql_cmd, sizeof(sql_cmd));
strcpy(sql_cmd, "COMMIT;");
exec(db, sql_cmd);
printf("插入完成\n");
sqlite3_close(db);
return 0;
}