数据库
专业存储数据、大量数据
数组、链表、变量---->内存:程序运行结束、掉电数据丢失
文件---->硬盘:程序运行结束、掉电数据不丢失
数据库---->硬盘
数据库文件与普通文件区别:
1.普通文件对数据管理(增删改查)效率低
2.数据库对数据管理效率高,使用方便
常用数据库:
1.关系型数据库:
将复杂的数据结构简化为二维表格形式
大型:Oracle、DB2
中型:MySql、SQLServer
小型:Sqlite
2.非关系型数据库:
以键值对存储,且结构不固定
//JSON
Redis
MongoDB
嵌入式数据库:
sqlite3:
stu.db
1.开源免费,c语言开发
2.代码量少,1万行左右,总大小10M以内
3.文件型数据库,可以移动
4.数据容量最大2T
sqlite3
1.sqlite相关的命令
.tables 查看数据库中的表
.headers on | off 开启/关闭表头
.mode column 列对齐
.width 列宽1 列宽2 设置列宽
.schema 表名 查询表头
2.sqlite的SQL语句
每个SQL语句后面必须要有一个分号
INTEGER:整型
REAL:浮点型
TEXT:文本类字符串
NULL:空
1.创建表
create table 表名(列名1 数据类型,列名2 数据类型,列名3 数据类型);
2.插入数据
insert into 表名 values(值1,值2,值3);
3.查询
select 列名1,列名2 from 表名;
select * from 表名;(所有)
4.条件查询
select * from 表名 where 条件(列 关系运算符 值);
关系运算符:>, <,=,!=,>=,<=,and,or
5.模糊查找
select * from 表名 where 列 like
% 可以通配多个字符
_ 只能通配一个字符
6.升序/降序排列
select * from 表名 order by 列名 ASC/DESC
7.删除一行
delete from 表名 where 列名 关系运算符 值;
8.删除表
drop 表名;
9.修改
update 表名 set=新值 where 列=值;
10.设置主键值自动增长列
1.主键值自动增长列的数据类型必须是INTEGER
2.类名 INTEGER PRIMARY KEY AUTOINCREMENT
11.设置时间
select datetime(“now”, “+8 hours”)
12.多表联查
CROSS JOIN 交叉连接
INNER JOIN 内连接
OUTER JOIN 外连接
3.sqlite3提供的c/c++ API接口
sqlite3_open
打开数据库,如果不存在,则创建
参数:
filename 数据库名称
ppDb 保存数据库句柄的地址
返回值:
成功 返回SQLITE_OK
失败 返回错误码
sqlite_exec
执行sql语句
参数:
sqlite*pdb 数据库句柄
sql 要执行的sql语句的首地址
int calllback(void*arg,int column_cnt,char * *column_value,char **column_name)(回调函数)
功能 在使用sqlite3_exec执行select语句时,每查找到一条数据,则调用一次回调
参数 arg sqlite_exec传递的第4个参数
column_cnt 查找到的数据的列数
column_value 查找到的一行数据的每一列值的地址的集合
column_name 查找到得一行数据得每一列列名的地址的集合
返回值 成功返回0
注意:
1.每找到一行,回调触发一次
2.回调函数必须返回0
errmsg 存储错误信息的地址
返回值:
成功 返回SQLITE_OK
失败 返回错误码
增删改查
c中二级指针的使用场景:
1.在被调函数中修改主调函数中的指针变量
2.指针数组的数组名为二级指针
快速查询:sqlitebrowser +数据库名