> 文档中心 > 【从零开始的嵌入式生活7】数据库开发

【从零开始的嵌入式生活7】数据库开发

【从零开始的嵌入式生活7】数据库开发
今天讲一讲数据库开发,这部分结束之后就会进入底层的开发原理和实践了,应用层的开发其实还是蛮有意思的,但是我们的目标是底层开发,冲鸭0.0

🧑🏻作者简介:一个学嵌入式的年轻人
✨联系方式:2201891280(QQ)
📔源码地址:https://gitee.com/xingleigao/study_qianrushi
全文大约阅读时间: 60min


文章目录

  • 数据库
    • 数据基本概念
    • 常用的数据库
    • 基于嵌入式的数据库
  • SQLite
    • SQLite的命令行操作
      • SQlite的安装
      • SQlite的基本命令
      • 系统命令
      • sql命令
  • SQLite编程接口
    • 打开数据库
    • 关闭数据库
    • 查看错误消息
    • 执行sql语句
  • 写在最后

数据库

数据基本概念

数据(Data)
能够输入计算机并能被计算机程序识别和处理的信息集合
数据库 (Database)
数据库是在数据库管理系统管理和控制之下,存放在存储介质上的数据集合


常用的数据库

大型数据库

  • Oracle公司是最早开发关系数据库的厂商之一,其产品支持最广泛的操作系统平台。目前Oracle关系数据库产品的市场占有率名列前茅。
  • IBM 的DB2是第一个具备网上功能的多媒体关系数据库管理系统,支持包Linux在内的一系列平台。

中型数据库

  • Server是微软开发的数据库产品,主要支持windows平台。

小型数据库

  • mySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司,2008年被Sun公司收购,开放源码。

基于嵌入式的数据库

由于嵌入式平台对资源的要求非常高,所以不太适用于上面的数据库。
基于嵌入式Linux的数据库主要有SQLite, Firebird, Berkeley DB, eXtremeDB

  • Firebird是关系型数据库,功能强大,支持存储过程、SQL兼容等
  • SQLite关系型数据库,体积小,支持ACID事务
  • Berkeley DB中并没有数据库服务器的概念,它的程序库直接链接到应用程序中
  • eXtremeDB是内存数据库,运行效率高

SQLite

SQLite的源代码是C,其源代码完全开放。SQLite第一个Alpha版本诞生于2000年5月。 他是一个轻量级的嵌入式数据库。
SQLite有以下特性:

  • 零配置一无需安装和管理配置;
  • 储存在单一磁盘文件中的一个完整的数据库;
  • 数据库文件可以在不同字节顺序的机器间自由共享;
  • 支持数据库大小至2TB;
  • 足够小,全部源码大致3万行c代码,250KB
  • 比目前流行的大多数数据库对数据的操作要快

SQLite的命令行操作

SQlite的安装

1–在线安装
apt 包管理是不是可以拿来用一用啦

sudo apt install sqlite

2–本地安装
官网下载
然后解压之后sudo dpkg -i *.deb就好了


SQlite的基本命令

系统命令

.开头的命令

命令 作用
.help 查看帮助
.quit 退出
.exit 退出
.schema 查看表的结构
.databases 查看所有的数据库
.table 查看所有的table

sql命令

不以.开头, 以;结尾的命令

命令 作用
create table stuinfo(id integer, name text, age integer, score float); 创建一张表
============================================== ================
insert into stuinfo values(1001, ‘zhangsan’, 18, 80); 插入一条记录
insert into stuinfo (id, name, score) values(1002, ‘lisi’, 90); 部分插入一条记录
============================================== ================
select * from stuinfo; 查看数据库记录
select name from stu; 查看部分记录
select * from stuinfo where score = 80 and name= ‘zhangsan’; 查询且
select * from stuinfo where score = 80 or name=‘wangwu’; 查询或
============================================== ================
delete from stuinfo where id=1003 and name=‘zhangsan’; 删除记录
============================================== ================
update stuinfo set age=20 where id=1003; 更新记录
update stuinfo set age=30, score = 82 where id=1003; 更新记录
============================================== ================
alter table stu add column adddress char; 插入一列

删除一列
1.创建一张新表
create table stu1 as select id,name,score from stu;
2.删除原有表
drop table stu;
3.改名
alter table stu1 rename to stu;

SQLite编程接口

API官网列表和介绍
需要相关的库文件:sudo apt-get install libsqlite3-dev


打开数据库

int sqlite3_open( const char *filename,   //数据库路径 sqlite3 **ppDb   //数据库的指针 文件句柄);

功能:打开sqlite数据库
参数:

  1. filename 数据库路径
  2. ppDb:数据库的操作句柄(指针)

返回值:成功返回SQLITE_OK,失败返回错误码


关闭数据库

int sqlite3_close(sqlite3*);

功能:关闭sqlite数据库
参数:db,数据库的指针
返回值:成功返回SQLITE_OK,失败返回错误码


查看错误消息

const char *sqlite3_errmsg(sqlite3*);

功能:通过db查看错误
返回值:错误消息


执行sql语句

int sqlite3_exec(sqlite3*,      /* An open database */const char *sql,      /* SQL to be evaluated */int (*callback)(void*,int,char**,char**),  /* Callback function */void *, /* 1st argument to callback */char **errmsg  /* Error msg written here */);

参数:

  1. db 数据库操作句柄
  2. sql 一条sql语句
  3. callback 回调函数,只有sql为查询语句的时候,才会执行这个语句。
  4. arg 给回调函数传递的参数
  5. errmsg 错误消息

返回值:成功SQLITE_OK

typedef  int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);

功能:每找到一条记录自动执行一次回调函数
para:传递给回调函数的参数
f_num:记录中包含的字段数目
f_value:包含每个字段值的指针数组
f_name:包含每个字段名称的指针数组
返回值:成功返回0,失败返回-1


小demo:
相关的代码在gitee库:/study_qianrushi/7.SQLite
【从零开始的嵌入式生活7】数据库开发


写在最后

应用层结束啦!!!!!!!!!!!!!!!!!!!!!!接下来大概一周时间更新一个大 的应用之后进入底层开发,长按催更见,前面的应用较多大家跟我一起改变世界。啊哈哈哈,求求大家给个三连再走吧,求求你们了0.0


【从零开始的嵌入式生活7】数据库开发