数据库
数组、链表、变量 ----->内存:程序运行结束,掉电数据丢失
文件 ----------------------->硬盘:程序运行结束,掉电数据不丢失
数据库:专业存储数据、大量数据 ----->硬盘
常用数据库:
1.关系数据库(类excle)
将复杂的数据结构简化为二维表格形式
大型:0racle、DB2
中型:MySql、SQLServer
小型:Sqlite(主要应用于嵌入式、物联网)
2.非关系数据库
以键值对存储,且结构不固定
//JSON
Redis
MongoDB
嵌入式数据库:
sqlite3 :
stu.db
1.开源免费,c语言开发
2.代码量少,1万行左右,总大小10M以内
3.文件型数据库,可以移动
4.数据容量最大2T
sqlite3 增删改查
1.sqlite相关的命令(不区分大小写)
必须以"."开头
打开一个数据库就像打开了一个excel表格
.tables 查看数据库中的表
.headers on / off 开启/关闭 表头
.mode column 列对齐
.width 列宽1 列宽2 列宽3 设置每一列的列宽
.schema (表名) 查看表的结构
2.sqlite的SQL语句
每个sql语句后面必须有一个分号(;)
INTEGER:整形
REAL:浮点型
TEXT:文本类型,字符串
NULL:空,字面义,无内容
1.创建表
create table 表名(列名 数据类型,列名2 数据类型,列名3 数据类型);
2.插入数据
insert into 表名 values(值1,值2,值3.....)
3.查询
select 列名1,列名2,from 表名;
select * from 表名;(查询所有列,*:通配符,表示所有列)
条件查询:*select * from 表名 where 列 关系运算符 值*;
只看张三:
select * from class1 where name = "zhangsan";
只看大于90:
select * from class1 where score >= 90;
关系运算符:> < = != >= <= and or
模糊查找:select * from 表名 where name like "%梅"
select * from 表名 where name like "--梅"
%:可以通配多个字符
---:只能通配一个字符
*升序排列:select * from 表名 order by 列名 ASC;*
*降序排列:select * from 表名 order by 列名 DESC;*
4.删除一行
delete from 表名 where 列名 关系运算符 值;
5.删除一张表
drop 表名
6.修改
update 表名 set = 新值 where 列 = 值
7.创建主键值自动增长列
1)主键值自动增长列的数据类型必须是INTEGER
- 类名是INTEGER PRIMARY KEY AUTOINCREMENT
3.sqlite3提供的c/c++ API接口
int sqlite3_open(const char *filename, sqlite3 **ppDb)
功能:打开数据库,如果不存在,则创建
参数:
filename:数据库名称
ppDb:
返回值:
成功:返回sqlite3_OK
失败:返回错误码
int sqlite3_exec( sqlite3* pdb, /* An open database */ const char *sql, /* SQL to be evaluated */ int (*callback)(void*,int,char**,char**), /* Callback function */ void *, /* 1st argument to callback */ char **errmsg /* Error msg written here */ )
功能:执行sql语句
参数:
pdb:数据库句柄
sql:要执行的sql语句的首地址
返回值:
成功:返回sqlite3_OK
失败:错误码
在C中二级指针的使用场景:
1.在被调函数中修改主调函数
2.指针数组的数组名即为二级指针