0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

常见的数据库管理

痞子衡嵌入式 来源:痞子衡嵌入式 作者:痞子衡嵌入式 2022-10-10 16:19 次阅读

摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数,掌握了就好。

一、常见的数据库

大型数据库(大型机)Oracle(亿级),中型数据库(分布式超大型)mysql(百万级),轻型数据库(嵌入式设备)sqlite(万级),访问数据库使用SQL语句,适用于所有的数据库。

二、安装SQLite3

有C环境就可以调用sqlite

2.1直接用命令安装

sudoapt-getupdate
sudoapt-getinstallsqlite3

2.2 直接编译源码

将源码拷贝到Ubuntu的非共享目录解压

c7752a36-4858-11ed-a3b6-dac502259ad0.png解压命令:

tarzvxfsqlite-autoconf-3380500.tar.gz

配置

cdsqlite-snapshot-201708031550
./configure--prefix=/home/gec/sqlite

编译

make

安装

makeinstall

三、SQLite的使用

新建数据库文件
sqlite3数据库文件的路径//打开/创建
//比如:sqlite3 first.db
c7884382-4858-11ed-a3b6-dac502259ad0.png

3.1 基本操作命令

.exit/.quit--------退出数据库命令行
.help--------------帮助说明信息
.tables------------查看当前数据库中所有的表

3.2 数据库访问的SQL语句

基本语法:

所有的SQL语句都以分号(;)结束
不区分大小写

3.3 新建表格

createtable表名(字段名1字段类型1,字段名2字段类型2,字段名3字段类型3,...);
比如:
//创建一个stutbl的表,表中有3个字段
//分别是整数类型的学号id,字符串类型的name和整数类型的age
createtablezhiguoxin(idint,namechar[20],ageint);
//不存在则创建
createtableifnotexistszhiguoxin(idint,namechar[20],ageint);
//如果希望表中某个字段的内容不重复,可以用unique修饰该字段
createtableifnotexistszhiguoxin(idintunique,namechar[20],ageint);
c79738ba-4858-11ed-a3b6-dac502259ad0.png

3.4 删除表格

droptable表名;
//droptablezhiguoxin;

3.5 往表格中插入数据

insertinto表名values(字段值1,字段值2,字段值3,....);
//字段值如果是字符串,必须用''(单引号)括起来
比如:
insertintozhiguoxinvalues(1001,'刘尧',18);
insertintozhiguoxinvalues(1002,'聂衍文',19);
insertintozhiguoxinvalues(1003,'杨佳晨',20);
insertintozhiguoxinvalues(1004,'冯华阳',21);
c7a4d7ea-4858-11ed-a3b6-dac502259ad0.png

完成插入之后,zhiguoxin 的表格内容如下:

id name age
1001 刘尧 18
1002 聂衍文 19
1003 杨佳晨 20
1004 冯华阳 21

3.6 查询表中的数据

//查询表中的所有数据

select*from表名;
//select*fromzhiguoxin;
c7b6874c-4858-11ed-a3b6-dac502259ad0.png

3.7 查看数据库

可以把first.db数据库文件拷贝至windows下,使用SQLite Developer打开即可看到。SQLite Developer下载地址

https://mydown.yesky.com/pcsoft/443425.html
c7cb2a76-4858-11ed-a3b6-dac502259ad0.png

3.8 按条件查找

1.使用where指定查询条件

select*fromzhiguoxinwhereid=1003;//查询id值为1003的条目
select*fromzhiguoxinwhereage>=19andage<21;
select * from zhiguoxin where age>=19orage<21;
c7dfe682-4858-11ed-a3b6-dac502259ad0.png

2.指定查询的字段

selectid,name,agefromzhiguoxin;//只查询id,name,age的字段
c7f59fae-4858-11ed-a3b6-dac502259ad0.png

3.使用where+like实现模糊查询

select*fromzhiguoxinwherenamelike'刘%';//查找名字以刘开头的条目
c8048802-4858-11ed-a3b6-dac502259ad0.png

4.使用order by实现查询结果按某个字段的值升序/降序输出

select*fromzhiguoxinorderbyagedesc;//按年龄降序排序
select*fromzhiguoxinorderbyidasc;//按id升序排序
c8162c92-4858-11ed-a3b6-dac502259ad0.png

3.9 删除表中的条目

deletefrom表名where条件;//删除所有符合条件的条目
比如:
deletefromzhiguoxinwhereid=1001;
c82a5884-4858-11ed-a3b6-dac502259ad0.png

3.10 更新(修改)表中的条目

update表名set字段名1=字段值1,字段名2=字段值2...where条件;//修改符合条件的条目
比如:
updatezhiguoxinsetage=100whereid=1002;
c83a71b0-4858-11ed-a3b6-dac502259ad0.png

3.11 SQLite中字段类型

数字:

int-------整型
smallint----短整型
tinyint-----微型整数(0~255)
bit---------0or1
float------单精度浮点型
real-------双精度浮点型

字符串:

char----------非unicode定长字符串< 8000
varchar ------- 非unicode变长字符串 < 8000
text ---------- 非unicode变长字符串 < 2^32-1
nchar ---------- unicode定长字符串 < 8000
nvarchar ------- unicode变长字符串 < 8000
ntext ---------- unicode变长字符串 < 2^32-1

四、SQLite的C语言访问接口

sqlite本身自带C语言访问接口,在C语言的环境下可以直接使用,使用这些接口的代码需要 sqlite的源码编译进可执行程序 或者 编译时链接sqlite的库。

4.1 打开 sqlite3_open

intsqlite3_open(
constchar*filename,/*数据库的文件路径*/
sqlite3**ppDb/*输出参数:传出代表打开数据库的句柄*/
);
//成功返回SQLITE_OK,否则打开失败char ----------非unicode定长字符串< 8000
varchar :非unicode变长字符串 < 8000
text :非unicode变长字符串 < 2^32-1
nchar:unicode定长字符串 < 8000
nvarchar : unicode变长字符串 < 8000
ntext :unicode变长字符串 < 2^32-1

4.2 关闭 sqlite3_close

intsqlite3_close(sqlite3*pDb);
//传入要关闭的数据库的句柄

4.3 编译方法

1.直接编译源码
gccsqlite3.csqlite_test.c-pthread-ldl-osqlite_test
2.链接sqlite3的动态库
gccsqlite_test.c-pthread-ldl-lsqlite3-L/home/gec/sqlite/lib-osqlite_test
//如果运行时找不到sqlite3的库,可以将编译出来的库文件拷贝到/usr/lib目录下(cp-r)

4.4 执行SQL语句的接口 sqlite3_exec

intsqlite3_exec(
sqlite3*pDb,/*打开的数据库的句柄*/
constchar*sql,/*要执行的SQL语句*/
int(*callback)(void*arg,intcol,char**str,char**name),
/*回调函数,处理SQL语句执行返回的结果(查询),一条结果调用一次
arg-exec的第四个参数
col-本条结果的字段数
str-记录字段值的数组
name-记录字段名的数组
回调函数必须返回SQLITE_OK*/
void*arg,/*传递给回调函数的第一个参数*/
char**errmsg/*错误信息*/
);
//成功返回SQLITE_OK,否则执行失败

几个例子

//连接数据库
intConnection_Sqlite3DataBase()
{
rc=sqlite3_open("./face_database/face.db",&db);
if(rc!=SQLITE_OK)
{
fprintf(stderr,"Can'topendatabase:%s
",sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else
printf("Youhaveopenedasqlite3databasenamedbind.dbsuccessfully!
Congratulation!Havefun!
");
return0;
}
//将图片插入到数据库
voidinsert_face_data_toDataBase(constchar*name,MByte*face_feature,MInt32featureSize)
{
sqlite3_prepare(db,"insertintoface_data_table(name,face_feature,feature_size)values(?,?,?);",-1,&stmt,NULL);
sqlite3_bind_text(stmt,1,name,strlen(name),NULL);
sqlite3_bind_blob(stmt,2,face_feature,featureSize,NULL);
sqlite3_bind_int(stmt,3,featureSize);
sqlite3_step(stmt);
}
c84c9bd8-4858-11ed-a3b6-dac502259ad0.png
审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    4981

    文章

    18281

    浏览量

    288402
  • 数据库
    +关注

    关注

    7

    文章

    3591

    浏览量

    63368
  • 函数
    +关注

    关注

    3

    文章

    3868

    浏览量

    61308

原文标题:手把手教你在嵌入式设备中使用SQLite3

文章出处:【微信号:pzh_mcu,微信公众号:痞子衡嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    lanbview怎么与数据库连接?

    在ODBC中设置与远程数据库SQL Server连接步骤:①在操作系统中通过“控制面板”选择“管理工具”中的“数据源(ODBC)”,“添加”创建新数据源。在“创建新
    发表于 03-22 11:32

    labvies访问数据库

    方式都无法正确反映各类数据之间的密切联系,都不能有效的管理和组织数据。因此以数据库为中心,以数据管理为重点,构建的基于
    发表于 08-26 10:19

    在LABVIEW中实现对数据库表格的操作

    利用LabVIEW数据库工具包只能操作而不能创建数据库,所以必须借助第三方数据库管理系统,比如Access,来创建数据库。本文试图通过LAB
    发表于 06-29 21:08

    数据库连接

    在利用 LabVIEW数据库工具包操作数据库之前,需要先连接数据库,这就像操作文件之前,先要打开文件一样。在这里我们利用UDL连接数据库。Microsoft设计的ODBC标准只能访问关
    发表于 06-29 21:29

    【HiKey试用体验】11.数据库管理工具phpmyadmin的安装

    虽然我们可以用命令的形式对数据库进行创建,但是对大部分人来说基于图形的管理工具还是要好用一点。这里安装phpmyadmin这款数据库管理工具。sudo apt-get install
    发表于 05-09 19:19

    信息管理 Labview数据库的基本操作

    本帖最后由 轻度红尘 于 2016-10-17 22:53 编辑 此程序是基于数据库操作的人员信息管理数据库操作有兴趣的朋友可以看看 同时希望坛友可以提出优化意见谢谢了(如果不能运行 可以在GET date base
    发表于 10-17 22:27

    数据库管理

    如题:用labview操作access数据库做公司测试流程管控。因测试数据量大,数据生成多,现在accdb文件已经有50M了,现在发现数据库在本地操作都很快,但是放在远端服务器后操作就
    发表于 11-08 16:58

    数据库智能管理助手-CloudDBA

    优,检测参数的不合理或者准备的延迟的情况。演讲嘉宾简介:勋臣,阿里云RDS内核团队技术专家,目前阿里云CloudDBA专家系统开发。有着丰富的数据库开发管理和优化的经验。本次直播视频精彩回顾,戳这里
    发表于 05-30 17:20

    安全数据库如何管理

    据我所知,关于BlueNrg-MS设备上绑定的编程手册部分,加密密钥存储在安全数据库中,以便解析地址并加密未来的数据连接。这一切似乎都按预期工作,但我不清楚如何管理安全数据库随着时间的
    发表于 03-04 16:41

    LabVIEW登录程序(数据库版)

    的程序讲解。附带不同类别下功能使用情况不同。下面是简单的程序截图。备注:1、数据库是其他数据库或者连接不上的可以看我以前的经验贴关于各种数据库连接方式及常见问题处理帖子。2、没有lab
    发表于 07-19 09:34

    数据库管理系统有什么功能?

    根据处理对象的不同,数据库管理系统的层次结构由高级到低级依次为应用层、语言翻译处理层、数据存取层、数据存储层、操作系统。
    发表于 04-02 09:00

    嵌入式数据库的作用是什么

    ,嵌入式数据库有着与通用数据库不同的特点。通常,嵌入式数据库管理系统就是在嵌入式设备上使用的数据库管理
    发表于 12-21 07:18

    保护MySQL数据仓库的最佳实践

    数据仓库中最常见数据库管理系统可能就是开源的MySQL数据库。以下5个小技巧重点介绍了一些保护MySQL
    发表于 09-27 14:10 0次下载

    MySQL数据库管理与应用

    MySQL数据库管理与应用 MySQL是一种广泛使用的关系型数据库管理系统,被认为是最流行和最常见的开源
    的头像 发表于 08-28 17:15 657次阅读

    redis与mysql的区别

    Redis与MySQL是两种常见数据库管理系统,两者在很多方面存在差异,本文将详细分析Redis与MySQL的区别。 数据模型: Redis是一种基于键值对的NoSQL
    的头像 发表于 11-16 11:21 488次阅读