1. 数据库文件与普通文件区别
- 普通文件对数据管理 (增删改查) 效率低
- 数据库对数据管理效率高,使用方便
2. 常用数据库
关系型数据库
将复杂的数据结构简化为二维表格形式
- 大型:Oracle、DB2
- 中型:MySql、SQLServer
- 小型:Sqlite
非关系型数据库
以键值对存储,且结构不固定(类似 JSON)
- Redis
- MongoDB
3. 嵌入式数据库 sqlite3
- 开源免费,C 语言开发
- 代码量少,1 万行左右,总大小 10M 以内
- 文件型数据库,可以移动
- 数据容量最大 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;
关系运算符:
> >= < <= !=多条件连接:and、or
--模糊查找
--% 匹配任意多个字符;_匹配单个字符
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 语句
- 参数:
pdb:数据库句柄sql:要执行的 SQL 语句callback:回调函数,select 查询拿到数据时触发执行arg:传递给 callback 的参数errmsg:保存出错信息
- 返回值:
- 成功:
SQLITE_OK - 失败:错误码
- 成功:
回调函数原型
int (*callback)(void *arg,int n,char**value,char**name);
- 参数
arg:sqlite3_exec 传入的参数n:查询结果列数value:每一列数据,字符串数组name:表头名字字符串数组
- 返回值:成功返回 0,非 0 代表出错
注意:
- callback 必须返回 0 代表正常;
- select 每查询到一条记录,callback 就执行一次;
- 数据库读出数据全部当作字符串处理。