数组、链表、变量----->内存:程序运行结束,数据丢失
文件-------------->硬盘
数据库:专业存储数据,大量数据----------->硬盘
一、数据库文件与普通文件区别:
1.普通文件对数据管理(增刪改查)效率低
2.数据库对数据管理效率高,使用方便
二、常用数据库:
1.关系型数据库:
将复杂的数据结构简化为二维表格形式
大型:Oracle、DB2
中型:MySq1、SQLServer
小型:Sqlite
2.非关系型数据库
以键值对存储,且结构不固定
//JSON
Redis
MongoDB
3.嵌入式数据库:
sqlite3 :
stu.db
1.开源免费,C语言开发;
2.代码量少,1万行左右,总大小10M以内;
3.文件型数据库,可以移动;
4.数据容量最大2T;
三、sqlite3数据库(SQLite 教程 | 菜鸟教程)
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 数据类型) ;
- 插入数据
insert into 表名 values(值1, 值2, 值3);
- 查询
select 列名1,列名2 from 表名;
select * from 表名;
条件查找:
select * from 表名 where 列 关系运算符 值;
关系运算符: > < = !=, >=, <=, and,or
like : 模糊匹配
% 可以通配多个字符
_ 只能通配一个字符
升序排列
select * from 表名 order by 列名 ASC;
降序排列:
select * from 表名 order by 列名 DESC;
- 删除一行
delect from 表名 where 列名 关系运算符 值;
- 删除一张表
drop 表名;
- 修改
update 表名 set 列名=新值 where 列=值;
-
设置主键值自动增长列
-
主键值自动增长列的数据类型必须是INTEGER
-
类名 INTEGER PRIMARY KEY AUTOINCREMENT,
8 .多表联查
内连接 INNER JOIN
外连接 LEFT OUTER
3.sqlite提供的c/c++ API接口
(1)int sqlite3_open(const char *filename,sqlite3 **ppDb
);
功能:是 SQLite 的 C 接口中的一个函数,用于打开一个 SQLite 数据库。如果指定的数据库文件不存在,该函数会创建一个新的数据库文件。
函数参数
const char *filename
:要打开的数据库文件的名称。如果文件不存在,将会创建一个新的数据库。sqlite3 **ppDb
:指向 SQLite 数据库的指针的地址。如果打开成功,该指针将指向打开的数据库对象。
返回值
- 返回值是一个整数,指示操作的结果:
SQLITE_OK
:成功打开数据库。- 其他值:表示错误,可以通过
sqlite3_errmsg()
获取详细的错误信息。
(2)int sqlite3_exec()
功能:用于执行 SQL 命令。
函数原型
int sqlite3_exec( sqlite3 *db, /* 数据库连接对象 */ const char *sql, /* 需要执行的 SQL 语句 */ sqlite3_callback callback, /* 回调函数,用于处理结果 */ void *arg, /* 回调函数的参数 */ char **errMsg /* 错误信息 */ );
参数
sqlite3 *db
:指向已打开的数据库连接对象的指针。const char *sql
:需要执行的 SQL 语句可以是一个或多个 SQL 命令(如INSERT
,UPDATE
,DELETE
,CREATE TABLE
等),以分号 (;
) 作为结尾。sqlite3_callback callback
:用于处理结果的回调函数。如果不需要处理结果,可以传入NULL
。void *arg
:传入回调函数的自定义参数,可以为NULL
。char **errMsg
:指向字符指针的地址,用于返回错误信息。如果执行成功,通常可以为NULL
。
返回值
- 返回值是一个整数,指示执行的结果:
SQLITE_OK
:表示成功。- 其他的返回值表示不同的错误,可以通过调用
sqlite3_errmsg(db)
获取具体的错误信息
回调函数:int callback(void *data, int argc, char **argv, char **azColName);
参数说明
-
*void data :用户自定义的参数。在调用
sqlite3_exec()
时,你可以传递一个指针作为这个参数,通常用于在回调中传递上下文信息。 -
int argc:查询结果中列的数量。
-
**char argv :一个字符串数组,每个字符串对应于结果集的一列。
argv[i]
是第i
列的值。如果某一列值为NULL
,则对应的元素为NULL
。 -
**char azColName :一个字符串数组,包含了每一列的列名。
azColName[i]
是第i
列的列名。
返回值
- 回调函数需要返回一个整数。如果返回非零值,SQLite 将终止执行。
(3)sqlite3_close();
创建插入示例:
从数据库中查找数据