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
审核编辑:彭静
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5068

    文章

    19013

    浏览量

    303130
  • 数据库
    +关注

    关注

    7

    文章

    3761

    浏览量

    64272
  • 函数
    +关注

    关注

    3

    文章

    4304

    浏览量

    62420

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

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

收藏 人收藏

    评论

    相关推荐

    数据库复制的设计和管理

    【摘 要】 介绍数据库复制在分布式数据库系统中的应用、设计和管理,给出了设计步骤和设计时考虑的因素。对设计和应用中出现的冲突问题进行了分析并给出了解决办法。对
    发表于 05-11 19:35 764次阅读

    数据库管理系统层次安全技术

    数据库管理系统层次安全技术 数据库系统的安全性很大程度上依赖于数据库管理系统。如果数据库
    发表于 06-17 07:45 719次阅读

    Informix数据库管理

    Informix数据库管理: 一、Informix数据库的安装
    发表于 08-01 15:29 1281次阅读

    数据库管理系统(DBMS)是什么意思

    数据库管理系统(DBMS)是什么意思 数据库管理系统提供了定义数
    发表于 03-18 15:21 1.1w次阅读

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

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

    数据库教程之数据库的创建与管理详细资料免费下载

    本文档的主要内容详细介绍的是数据库教程之数据库的创建与管理详细资料免费下载。内容包括了:SQL Server数据库概述, 创建数据库,修改
    发表于 10-19 10:41 18次下载
    <b class='flag-5'>数据库</b>教程之<b class='flag-5'>数据库</b>的创建与<b class='flag-5'>管理</b>详细资料免费下载

    数据库有哪些常见的应用结构数据库应用结构的使用资料概述

    本文档的主要内容详细介绍的是数据库有哪些常见的应用结构数据库应用结构的使用资料概述 数据库常见的应用结构有:1.集中式结构2.文件服务器结构
    发表于 10-31 16:57 11次下载
    <b class='flag-5'>数据库</b>有哪些<b class='flag-5'>常见</b>的应用结构<b class='flag-5'>数据库</b>应用结构的使用资料概述

    数据库管理系统的功能

    本视频主要详细介绍了数据库管理系统的功能,分别是数据定义、数据操作、数据库的运行管理
    的头像 发表于 02-22 15:52 5864次阅读

    数据库系统的常见用户

    数据库管理员(DatabaseAdministrator,简称DBA),是从事管理和维护数据库管理系统(DBMS)的相关工作人员的统称,属于
    的头像 发表于 02-22 16:28 9267次阅读

    数据库教程之SQL Server数据库管理的详细资料说明

    本文档详细介绍的是数据库教程之SQL Server数据库管理的详细资料说明主要内容包括了:1.了解SQL Server 的安装、功能和特点;2.使用企业管理器、查询分析器和在线帮助;3
    发表于 03-01 11:00 26次下载
    <b class='flag-5'>数据库</b>教程之SQL Server<b class='flag-5'>数据库</b><b class='flag-5'>管理</b>的详细资料说明

    常见MySQL数据库管理工具的介绍

    最初MySQL本身没有提供非常方便的图形管理工具,日常的开发和维护均在类似DOS窗口中,用命令行进行数据库的操作。所以对于开发和测试同学来说,上手略微有点困难,增加了学习成本。 本文详细给出了几款常见MySQL
    的头像 发表于 03-29 13:55 3256次阅读
    <b class='flag-5'>常见</b>MySQL<b class='flag-5'>数据库</b><b class='flag-5'>管理</b>工具的介绍

    数据库建立|数据库创建的方法?

    数据库是一个存储关键数据的文件系统。利用数据库管理系统建立每个人的数据库可以更好地提供安全。 数据库
    的头像 发表于 07-14 11:15 1214次阅读

    MySQL数据库管理与应用

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

    redis与mysql的区别

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

    常见的存储Idea数据库的地方

    Idea的数据库被存储在许多不同的地方,取决于应用程序和使用的技术。下面将详细描述一些常见的存储Idea数据库的地方。 关系型数据库(RDBMS):关系型
    的头像 发表于 12-06 14:15 916次阅读