数组、链表、变量----->内存:程序运行结束,数据丢失
文件-------------->硬盘
数据库:专业存储数据,大量数据----------->硬盘
一、数据库文件与普通文件区别:
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 数据类型) ;
       2. 插入数据
            insert into 表名 values(值1, 值2, 值3);
       3. 查询
           select 列名1,列名2  from 表名;
           select *  from 表名;
          条件查找:
           select *  from 表名 where 列 关系运算符 值;
           关系运算符:   >   <   =    !=, >=, <=, and,or
          like : 模糊匹配
         % 可以通配多个字符
         _  只能通配一个字符
        升序排列
         select * from 表名 order by 列名 ASC;
         降序排列:
         select * from 表名 order by 列名 DESC;
    4. 删除一行
         delect from 表名 where 列名 关系运算符 值;
     5. 删除一张表
         drop 表名;      
    6. 修改    
         update 表名 set 列名=新值 where 列=值;
    7. 设置主键值自动增长列
         1. 主键值自动增长列的数据类型必须是INTEGER
         2. 类名 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();
创建插入示例: