目录

一、数据库概述

1、分类

2、名词

(1)DB 数据库 select update database

(2)DBMS 数据库管理系统

(3)MIS     管理信息系统

(4)OA      办公自动化

二、嵌入式数据库—sqlite3    

(一)概述

1、优点

2、安装与使用

(1)在线安装命令

(2)验证是否安装成功

(3)启动sqlite3 

(二)sqlite命令

(三)标准SQL语句

1、创建表

2、删除表

3、插入数据

4、查询表中数据

(1)筛选条件

(2)like(针对字符串)

(3)通配符(% _)(模糊查找)

(4)模糊查找

(5)两个条件用or and

(6)where语句

(7)order by语句(排序)

(8)limit语句(数据量大时可使用)

5、修改表中数据

6、删除表中数据(一删就是一条)       

7、自动增长列

主键

8、插入时间列

datetime函数

(三)数据库的导出导入(命令行shell命令)

1、数据的导出

2、数据的导入

3、可视化工具(sqlitebrowser )

(1)安装命令

(2)shell命令

(3)按键

三、数据库手册查询

四、sqlite3数据库编程

1、需要的头文件

2、编译过程

3、编程框架

 4、sqlite3_open函数(打开数据库)

5、sqlite3_close函数(关闭数据库)

6、sqlite3_exec函数(增删改操作)

fun函数

代码示例(插入操作)

7、show函数+sqlite3_exec函数(查找操作)

代码示例(查找操作)


一、数据库概述

1、分类

        大型            中型                     小型
 ORACLE   MYSQL/MSSQL   SQLITE  DBII powdb

    SQL  struct query language(结构化查询语言) 关系型数据库    

    非关系型数据库 如:芒果db

2、名词

(1)DB 数据库 select update database
(2)DBMS 数据库管理系统
(3)MIS     管理信息系统
(4)OA      办公自动化

二、嵌入式数据库—sqlite3    

(一)概述

1、优点

  (1)开源  C语言开发(运行效率高)
  (2)代码量少 1万行左右,总大小10M以内
  (3)绿色软件无需安装
  (4)文件型数据库,可以移动。
  (5)数据容量最大 2T   

2、安装与使用

(1)在线安装命令

sudo apt-get install sqlite3 //安装数据库
sudo apt-get install libsqlite3-dev//安装数据库软件安装包

注:调用数据库编译命令:gcc test.c -lsqlite3

(2)验证是否安装成功

sqlite3 --version
sqlite3 --help

(3)启动sqlite3 

sqlite3 xxx.db  ===>用sqlite3 来打开一个名称为test.db的本地数据库。

出现如下提示符:表明数据库管理系统启动。
sqlite> 

注:sqlite> 表示进入控制台

可在 sqlite> 后执行SQL语句(C语言中也可写)(增删改查操作)

也可在 sqlite> 后执行sqlite命令(以“.”开头的命令)(只能在控制台写入)。

(二)sqlite命令

出现所有相关的系统维护命令,都是以 "."开头。

.help  查询命令

.database  列出当前库和系统中哪个文件在关联
.tables    列出当期数据库中的所有表
.schema xxx 列出当前指定的xxx表结构
.dump user   ===>导出数据库

.exit  退出到shell命令终端

.headers on||off  显示表头

.quit  退出
重定向
sqlite3 test.db .dump > 123.sql
sqlite3 xxx.db < test.sql ===>导入数据库

(三)标准SQL语句

struct query language; 通用语法在其他平台可以直接使用。

注意:所有的sql语句都以';'结尾

1、创建表

create table  表名(表字段1,表字段2,...);

create table关键字进入控制台不区分大小;

表名符合C语言标识符规则;

列名用纯英文;

eg:create table user(id,name,age); 

create table 表名 (表字段 类型,表字段 类型,...);

类型:

char(短文本) int text(长文本) real(C中的float和double类型)

blob(二进制数据(如照片、文件路径))

eg:create table user(id int  ,name char,age int);

ctrl c//退出                ctrl d//保存表

2、删除表

drop table  表名;
eg:drop table user;

3、插入数据

insert into 表名 (字段名称 ) values (值名称);
   eg:insert into user (id,age) values (1,10);
        insert into user values(3,"wang",11);
        insert into user (age) values ( 12);

4、查询表中数据

 select 列名 from 表名  条件;
   eg:select * from user ;//表中所有数据都刷出来
           select id from user;
           select id,name from user where not  age <30(筛选条件);

注:列也可进行相关数学操作(eg:select id+age,name from user;)

(1)筛选条件

        age < > = != == num(数字类型支持C中的数字运算符)

(2)like(针对字符串)

eg:select * from user where name like 'zhangsan';

        select * from user where name = 'zhangsan';

(3)通配符(% _)(模糊查找)

注:通配符可放在任意位置;

%:可代表0-任意多个的任意字符;

_:代表一个任意字符(只能是一个)

(4)模糊查找

eg:select * from user where name like 'zhang%';//查找姓张的人员(名字长度不定)

        select * from user where name like 'zhang_';//查找张X

(5)两个条件用or and

        两个条件之间用and or连接,相当于&&和||,但&&  ||不可出现

(6)where语句

条件子句,后接筛选条件

(7)order by语句(排序)

注:如果where语句与order by语句都要出现,order by语句只能放在where语句后面(语法要求)

eg:select * from user order by age;//默认升序排序

        select * from user order by age;//逆序排序(降序)

(8)limit语句(数据量大时可使用)

eg:select * from user limit 10;//表中存储的前10项

注:3种语句同时出现有顺序要求:where——>order by——>limit

5、修改表中数据

 update 表名 set 表字段 = 值  满足条件;
   eg: update user set id = 1 where name = 'li';
           update user set id = 1 where name = "li" and passwd = "123";
           update user set id = 2 where name = "li" or  name = "zhao";

6、删除表中数据(一删就是一条)       

delete from 表名  满足条件;
eg:delete from user ;  ///删除表中所有数据
        delete from user where id  = 1; ///删除id=1 的数据;
        delete from user where id =1 and name = "zhang";
        delete from user where id = 1 or id  = 2;

7、自动增长列

sqlite> CREATE TABLE user3(id INTEGER PRIMARY KEY ASC,name char,age int,dt datetime);

eg:create table user2(id INTEGER PRIMARY KEY ASC,name char);

主键

主键是向某一列设置的不能重复,select查时用主键搜索速度快;

eg :insert into user2 values(10,"zhangsan");//从10开始增长

      insert into user2 values(NULL,"lisi");//建议第一次就写NULL

8、插入时间列

CREATE TABLE user1(id int,name char,age int,dt datetime);

eg:insert into user1 values (2,'张三',23,‘2025-6-10 14:26’);

datetime函数

eg:select datetime('now');

        insert into user1 values (2,'张三',23,datetime('now','+8 hours'));

(三)数据库的导出导入(命令行shell命令)

1、数据的导出

sqlite3 xxx.db .dump > xxx.sql//将数据库名称为xxx的数据库整体导出到脚本中

                                                  把已有数据库导出为标准sql(数据备份)

                                                > 输出重定向

eg : sqlite3 test.db .dump > 1.sql //test.db导出到1.sql

2、数据的导入

sqlite3 xxx.db < xxx.sql// < 输入重定向

eg:sqlite3 1.db < 1.sql //1.sql导入到1.db中

3、可视化工具(sqlitebrowser )

(1)安装命令

sudo apt-get install sqlitebrowser 

(2)shell命令

sqlitebrowser teat.db//(进入图形界面看数据库中的数据)

(3)按键

浏览数据

增加数据

删除数据

保存

还原

写入SQL语句

三、数据库手册查询

1、在线查询:www.sqlite.org(官网)

2、离线查询(文档所在处):note/sec4_sqlite/01sqlite3/sqlite-doc-3080403文档

-Documentation

--SQLite Programming Interfaces//编程接口

---C/C++ API Reference//函数参考

---SQLite In 5 Minutes Or Less//相关代码示例参考

---SQL_Syntax//语法相关查询

四、sqlite3数据库编程

1、需要的头文件

#include<sqlite3.h>

2、编译过程

gcc后加-lsqlite3

3、编程框架

打开数据库 ==》读写数据库(增,删,改,查) ==》关闭数据库

 4、sqlite3_open函数(打开数据库)

  函数原型:int sqlite3_open(char * path,sqlite3 ** db);
    功能:打开指定path路径+文件名称的数据库,并将
               打开的地址指向db变量的句柄。
    参数:path 要打开的数据库路径+名称
               db  要打开的数据库地址指针
    返回值:成功  0;失败  -1

5、sqlite3_close函数(关闭数据库)

 函数原型:int sqlite3_close(sqlite3 *db);
    功能:关闭指定的数据库
    参数:要关闭的数据库地址
    返回值:成功  0;失败  -1

6、sqlite3_exec函数(增删改操作)

函数原型:int sqlite3_exec(sqlite3 *db,char *sql,callback fun,void * arg,char ** errmsg);
功能:在db数据库上执行sql 非查询语句,并将结果返回;
参数:db 要执行sql的数据库
          sql  要执行的非查询sql语句。
          fun  如果该函数要执行查询语句,则该回调函数用来回收查询的结果。
          arg  回调函数的参数,如果没有回调函数则该参数为NULL;
          errmsg  执行过程中的错误信息。
返回值:执行成功  0;失败  非0 

fun函数

函数原型:int fun(void *arg ,int f_num,char ** f_value,char ** f_name)
功能:该函数用于sqlite3_exec执行select语句的结果集返回数据。
参数:arg 由sqlite3_exec传入的参数
          f_num 执行该命令所返回测结果集的字段个数。
          f_value 查询结果集中的字段的值。
          f_name  查询结果集中的字段的名称。
返回值:成功 0;失败 非0
注意:该回调函数必须有返回值,否则可能导致查询异常。

代码示例(插入操作)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sqlite3.h>
int main(int argc,char **argv)
{
    sqlite3* db = NULL;
    int ret  = sqlite3_open("./test.db", &db);
    if(SQLITE_OK != ret)
    {
        fprintf(stderr,"open %s\n",sqlite3_errmsg(db));
        sqlite3_close(db);
        return 1;
    }
    char * errmsg;//指针接返回结果
    char sql_cmd[] = "insert into user values(6,'lisi',20);";
    ret = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);
    if(SQLITE_OK != ret)
    {
        fprintf(stderr,"exec sql:[%s]  errmsg:%s\n",sql_cmd,errmsg);
        sqlite3_free(errmsg);
        sqlite3_close(db);
        return 1;
    }
    sqlite3_close(db);
    return 0;
}

7、show函数+sqlite3_exec函数(查找操作)

show函数为回调函数,调用次数与结果集有关;

在sqlite3_exec函数内部调用show函数;

代码示例(查找操作)

#include <sqlite3.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

int show(void* arg, int col, char** result, char** title)
{
  int i = 0;
  static int flag = 0;
  if (0 == flag)
    {
        flag =1;
      for (i = 0; i < col; i++)
        {
          printf("%s\t", title[i]);
        }
      printf("\n");
    }

  for (i = 0; i < col; i++)
    {
      printf("%s\t", result[i]);
    }
  printf("\n");
  return 0;
}

int main(int argc, char** argv)
{
  sqlite3* db = NULL;
  int ret = sqlite3_open("./test.db", &db);
  if (SQLITE_OK != ret)
    {
      fprintf(stderr, "open %s\n", sqlite3_errmsg(db));
      sqlite3_close(db);
      return 1;
    }

  char* errmsg;
  char sql_cmd[] = " select * from user;";
  ret = sqlite3_exec(db, sql_cmd, show, NULL, &errmsg);
  if (SQLITE_OK != ret)
    {
      fprintf(stderr, "exec sql:[%s]  errmsg:%s\n", sql_cmd, errmsg);
      sqlite3_free(errmsg);
      sqlite3_close(db);
      return 1;
    }

  sqlite3_close(db);

  // system("pause");
  return 0;
}

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐