数据库是“按照数据结构来组织、存储和管理数据的仓库”。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。
数据库分类
- 常用的数据库
- 大型数据库 :Oracle
-
- 中型数据库 :Server是微软开发的数据库产品,主要支持windows平台
- 小型数据库 : mySQL是一个小型关系型数据库管理系统。开放源码
-
- SQLite基础
- SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。
- SQLite有以下特性:
- 零配置一无需安装和管理配置;
- 储存在单一磁盘文件中的一个完整的数据库;
- 数据库文件可以在不同字节顺序的机器间自由共享;
- 支持数据库大小至2TB(1024G = 1TB);足够小,全部源码大致3万行c代码,250KB;
- 比目前流行的大多数数据库对数据的操作要快;
-
- 创建SQLite数据库:
- 手工创建
- 使用sqlite3工具,通过手工输入SQL命令行完成数据库创建.
- 用户在Linux的命令行界面中输入sqlite3可启动sqlite3工具
- 代码创建
- 在代码中常动态创建数据库 在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库
虚拟机中sqlite3安装
- sqlite3 安装:
- 在线安装
- 1、设置能够上网
- 2、更新更新源
- apt-get update
- 3、安装软件及开发环境
- apt-get install sqlite3 --->sqlite3数据库软件
- apt-get install libsqlite3-dev --->sqlite3数据库开发支持库
- apt-get install sqlite3-doc --->sqlite3数据库说明文档
- --------------------------------
- apt-get install sqlitebrowser
- --->sqlite3数据库操作软件
源码安装:
- tar xf sqlite-autoconf-3140100.tar.gz
- ./configure
- make
- sudo make install
安装完成后,可以使用sqlite3 -version命令来测试是否安装成功
- $ sqlite3 -version
- 3.14.1 2016-08-11
【腾讯文档】sqlite基础SQL语句使用






![]()
创建查看



中文文档:SQLite 命令 - SQLite 中文版 - UDN开源文档
- 头文件:#include <sqlite3.h>
- 编译:gcc sqlite1.c -lsqlite3
-
- 1.int sqlite3_open(char *path, sqlite3 **db);
-
- 功能:打开sqlite数据库,如果数据库不存在则创建它
- path: 数据库文件路径
- db: 指向sqlite句柄的指针
- 返回值:成功返回SQLITE_OK,失败返回错误码(非零值)
-
- 2.int sqlite3_close(sqlite3 *db);
-
- 功能:关闭sqlite数据库
- 返回值:成功返回SQLITE_OK,失败返回错误码
-
- 返回值:返回错误信息
-
- 3.执行sql语句接口
- int sqlite3_exec(
- sqlite3 *db, /* 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操作
- db:数据库句柄
- sql:要执行SQL语句
- callback:回调函数(满足一次条件,调用一次函数,用于查询)
- 再调用查询sql语句的时候使用回调函数打印查询到的数据
- arg:传递给回调函数的参数
- errmsg:错误信息指针的地址
- 返回值:成功返回SQLITE_OK,失败返回错误码
-
- 回调函数:
- typedef int (*sqlite3_callback)(void *para, int f_num,
- char **f_value, char **f_name);
-
- 功能:select:每找到一条记录自动执行一次回调函数
- para:传递给回调函数的参数(由 sqlite3_exec() 的第四个参数传递而来)
- f_num:记录中包含的字段数目
- f_value:包含每个字段值的指针数组(列值)
- f_name:包含每个字段名称的指针数组(列名)
- 返回值:成功返回SQLITE_OK,失败返回-1,每次回调必须返回0后才能继续下次回调
-
- 4.不使用回调函数执行SQL语句(只用于查询)
- int sqlite3_get_table(sqlite3 *db, const char *sql,
- char ***resultp, int *nrow, int *ncolumn, char **errmsg);
-
- 功能:执行SQL操作
- db:数据库句柄
- sql:SQL语句
- resultp:用来指向sql执行结果的指针
- nrow:满足条件的记录的数目(但是不包含字段名(表头 id name score))
- ncolumn:每条记录包含的字段数目
- errmsg:错误信息指针的地址
-
- 返回值:成功返回SQLITE_OK,失败返回错误码
-
- 5.返回sqlite3定义的错误信息
- char *sqlite3_errmsg(sqlite3 *db);
创建查看



- 常用的数据库
- 大型数据库 :Oracle
- 中型数据库 :Server是微软开发的数据库产品,主要支持windows平台
- 小型数据库 : mySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据)
-
- SQLite基础
- SQLite的源代码是C,其源代码完全开放。它是一个轻量级的嵌入式数据库。
- SQLite有以下特性:
- 零配置一无需安装和管理配置;
- 储存在单一磁盘文件中的一个完整的数据库;
- 数据库文件可以在不同字节顺序的机器间自由共享;
- 支持数据库大小至2TB(1024G = 1TB); 嵌入式足够
- 足够小,全部源码大致3万行c代码,250KB;
- 比目前流行的大多数数据库对数据的操作要快;
-
- 创建SQLite数据库:
-
- 1. 手工创建
- 使用sqlite3工具,通过手工输入SQL命令行完成数据库创建.
-
- -----------------两种方式都会用得到,重点是代码创建--------------------
- 2. 代码创建
- 在代码中常动态创建数据库 在程序运行过程中,当需要进行数据库操作时,应用程序会首先尝试打开数据库,
- 此时如果数据库并不存在,程序则会自动建立数据库,然后再打开数据库
源码安装:
安装完成后,可以使用sqlite3 -version命令来测试是否安装成功

sql有两种命令:
1. sqlite3系统命令 --- .开头
2. SQL命令 --- ;结尾
命令在 记事本 中详细展示, 群内已分享 sqlite3 sql语句.txt
常用接口会在 sqlite3 编程中具体展示
头文件: #include
编译方式: gcc 文件名.c -lsqlite3
- 打开或创建数据库
- sqlite3_open
- 头文件: #include<sqlite3.h>
- 声明: int sqlite3_open(char *path, sqlite3 **db);
- 功能:打开sqlite数据库 (或新建数据库)
- 参数:
- path: 数据库文件路径
- db: 指向数据库句柄的指针
- - 该二级指针指向一级指针地址,最终会存储打开的数据库的首地址
-
- 返回值:成功返回0,失败返回错误码(非零值)
- 使用: sqlite3 *db;
- if(sqlite3_open("stu.db",&db) != 0)
- {
- fprintf(stderr,”err: %s\n”,sqlite3_errmsg(db));
- }//sqlite3自带的打印错误信息
-
- 打印错误信息
- sqlite3_errmsg
- 声明:const char *sqlite3_errmsg(sqlite3 *db); //bd;
- 功能: 打印错误信息
- 返回值:返回错误信息
- 使用: fprintf(stderr,"sqlite3_open failed %s\n",sqlite3_errmsg(db));
-
使用: 
- sqlite3_close
- 声明: int sqlite3_close(sqlite3 *db);
- 功能:关闭sqlite数据库
- 返回值:成功返回0,失败返回错误码
- 使用: sqlite3_close(db);

- 功能:执行sql语句;
- 原型:
- int sqlite3_exec(
- sqlite3 *db, /* An open database */
- const char *sql, /* SQL to be evaluated */
- int (*callback)(void*,int,char**,char**),
- void *arg, /* 1st argument to callback */
- char **errmsg /* Error msg written here */
- );
- 参数:
- sqlite3 *db:指定要操作的数据库句柄指针;
- char *sql:指定要执行的sql语句;
- int (*callback)(void*,int,char**,char**):回调函数;
- {callback(void *arg,int f_num,char ** f_value ,char **f_name)}
- void *arg:传递给回调函数的第一个参数;
- - 类似线程函数传参,需强转 - 不传参可以填NULL
- char **errmsg:该二级指针指向的以一级指针会存储错误信息的首地址;
- (定义一个一级指针就好了)
- 错误信息存储在静态存储区,存在着相应的源码,我们不用去深究
- 返回值:
- 成功,返回SQLITE_OK,其实就是0;
- 失败,返回e
- rror_code,其实就是非0
-
使用:


sqlite3_exec : 每查询到一行满足条件的信息, 都会调用一次callback函数显示结果
- int sqlite3_exec 的回调函数:(一般在执行 需要终端打印数据的时候使用)
-
- int callback(void *arg, int columns, char **column_text, \
- char **column_name);
-
- 功能:sqlite3_exec每找到一条满足条件的记录,就会执行一次回调函数。
-
- 参数:
- void *arg:sqlite3_exec的第四个参数传入;
- int columns:查询结果的列数;
- char **column_text:该二级指针指向的是一个数组,该数组是一个指针数组
- 数组中的元素都是char*类型的指针。指针指向查询结果的内容
- char **column_name:该二级指针指向的是一个数组,该数组是一个指针数组
- 数组中的元素都是char*类型的指针,指针指向查询结果的列名;
-
- 返回值
- :
- 成功时候必须返回0,该返回值会返回给sqlite3_exec函数,
- 如果没有返回0,则sqlite3_exec会认为回调函数运行失败,从而导致sqlite3_exec运行失败; //记得加入 return 0;
-
关于回调函数中, 如何打印查询的内容:

查询
- 只用于查询
- sqlite3_get_table()
- 声明: int sqlite3_get_table(sqlite3 *db, const char *sql,\
- char ***resultp, int *nrow, int *ncolumn, char **errmsg);
-
- 功能:执行SQL操作
-
- 参数: db:数据库句柄
- sql:SQL语句
- resultp:用来指向sql执行结果的指针
- (该参数三级指针,肯定指向二级指针,所以定义二级指针变量)
- nrow:该一级指针指向的内存空间中存储结果的行数,(一级指针指向变量地址)
- 包括列名 id name sorce
- ncolumn:该一级指针指向的内存空间中存储结果的列数
- errmsg:该二级指针指向的一级指针会存储错误信息首地址
-
- 返回值:成功返回SQLITE_OK,失败返回错误码
-