嵌入式从0到精通——SQLite3 数据库

1. 数据库文件与普通文件区别

  1. 普通文件对数据管理 (增删改查) 效率低
  2. 数据库对数据管理效率高,使用方便

2. 常用数据库

关系型数据库

将复杂的数据结构简化为二维表格形式

  • 大型:Oracle、DB2
  • 中型:MySql、SQLServer
  • 小型:Sqlite

非关系型数据库

以键值对存储,且结构不固定(类似 JSON)

  • Redis
  • MongoDB

3. 嵌入式数据库 sqlite3

  1. 开源免费,C 语言开发
  2. 代码量少,1 万行左右,总大小 10M 以内
  3. 文件型数据库,可以移动
  4. 数据容量最大 2T

4. sqlite3 的安装

复制代码
# 在线安装
sudo apt-get install sqlite3
sudo apt-get install libsqlite3-dev

5. sqlite3 终端命令

复制代码
# 创建/打开数据库
sqlite3 xxx.db
命令 作用
.help 查看帮助
.tables 查看数据库中的表名
.headers on/off 打开 / 关闭表头
.mode column 设置表左对齐
.quit 退出数据库

6. SQL 语句(不区分大小写)

sqlite 数据类型:

  • NULL:空类型
  • INTEGER:整数类型
  • REAL:浮点型
  • TEXT:字符串类型 (文本)
  • BLOB:二进制,根据输入确定

① 创建表

复制代码
create table 表名(列名1 数据类型1, 列名2 数据类型2, 列名3 数据类型3);
--示例
create table class1(id INTEGER, name TEXT, score REAL);

② 插入数据

复制代码
insert into 表名 values(值1, 值2, 值3);
--示例 TEXT字符串需要 "" 或 ''包裹
insert into class1 values(1, "zhangsan", 88.5);

③ 查询数据

复制代码
--查询表全部数据
select * from 表名;

--查询指定列
select 列名1, 列名2 from 表名;

--条件查询
select * from 表名 where 列 关系运算符 值;
--示例
select * from class1 where id=1;

关系运算符:> >= < <= != 多条件连接:andor

复制代码
--模糊查找
--% 匹配任意多个字符;_匹配单个字符
select * from class1 where name like "马%";
select * from class1 where name like "马__";

--有序查找
--ASC升序,DESC降序
select * from 表名 order by 列名 ASC;
select * from 表名 order by 列名 DESC;

④ 删除数据

复制代码
delete from 表名 where 条件;

⑤ 修改数据

复制代码
update 表名 set 列=新值 where 条件;

⑥ 删除表

复制代码
drop table 表名;

⑦ 主键自动增长列

复制代码
create table 表名(列名 INTEGER PRIMARY KEY AUTOINCREMENT, 列名 数据类型);

7. 可视化工具

复制代码
# ubuntu
sudo apt-get install sqlitebrowser
sqlitebrowser xxx.db

Windows 工具:NavicatSqlite3

8. sqlite3 C/C++ API 接口

sqlite3_open

复制代码
int sqlite3_open(
const char *filename,   /* Database filename (UTF-8) */
sqlite3 **ppDb          /* OUT: SQLite db handle */
);

功能:打开一个数据库文件

  • 参数:
    • filename:数据库名称
    • ppDb:保存数据库句柄的指针 sqlite3 *
  • 返回值:
    • 成功:SQLITE_OK
    • 失败:错误码

sqlite3_errmsg

复制代码
const char *sqlite3_errmsg(sqlite3* pdb);

功能:获取当前数据库错误码对应的错误信息

  • 参数:pdb 数据库句柄
  • 返回值:错误信息字符串

sqlite3_exec

复制代码
int sqlite3_exec(
sqlite3* pdb,                                  /* An open database */
const char *sql,                               /* SQL to be evaluated */
int (*callback)(void*,int,char**,char**),       /* Callback function */
void *arg,                                     /* 1st argument to callback */
char **errmsg                                  /* Error msg written here */
);

功能:执行 SQL 语句

  • 参数:
    1. pdb:数据库句柄
    2. sql:要执行的 SQL 语句
    3. callback:回调函数,select 查询拿到数据时触发执行
    4. arg:传递给 callback 的参数
    5. errmsg:保存出错信息
  • 返回值:
    • 成功:SQLITE_OK
    • 失败:错误码
回调函数原型
复制代码
int (*callback)(void *arg,int n,char**value,char**name);
  • 参数
    • arg:sqlite3_exec 传入的参数
    • n:查询结果列数
    • value:每一列数据,字符串数组
    • name:表头名字字符串数组
  • 返回值:成功返回 0,非 0 代表出错

注意:

  1. callback 必须返回 0 代表正常;
  2. select 每查询到一条记录,callback 就执行一次;
  3. 数据库读出数据全部当作字符串处理。
相关推荐
海浪仙人掌1 小时前
账龄分析怎么操作?账龄分析实施流程有哪些步骤?
数据库
楚枫默寒1 小时前
Oracle AWR 自动巡检报告
数据库·oracle
吉甫作诵1 小时前
Oracle 19c 常用运维命令大全
运维·数据库·oracle
宗介波妞1 小时前
主站与场站多业务链路通断测试实战指南(电力自动化联调)
网络·数据库
邪修king1 小时前
MySQL数据库(二):操作详解:从创建、查看到备份恢复
数据库·mysql
tryxr1 小时前
Chat2Excel 项目用户服务开发
java·数据库·java项目·用户服务开发
kiss strong2 小时前
redis服务器登录(内网环境,无法使用客户端)
数据库·redis·缓存
志栋智能2 小时前
运维超自动化中的配置管理实践
运维·网络·数据库·自动化
邪修king2 小时前
MySQL 数据库(三):表级操作实战:增删查改全实例演示 + 企业实操红线规范
android·数据库·mysql