【嵌入式实验】《嵌入式数据库 sqlite 移植及使用》,物联网嵌入式开发面试题2024笔试

79 阅读6分钟

第三步,编译 sqlite,命令为 make,编译过程中使用的编译器为 arm-linux-gcc

在这里插入图片描述

第四步,安装 sqlit,命令为 make insatll。安装完成后到 \opt\sqlite 文件夹下去查看相关文件,可以看到该文件夹下有(bin)、(include)、(lib)和 share 文件夹,其中可执行文件 sqlite3 位于(./bin)文件夹,库位于(./lib)文件夹。

在这里插入图片描述

第五步,将 sqlite3 拷贝到开发板 bin 目录下,将库下的文件拷贝到开发板的 lib 目录下【注意链接文件的创建】

6:数据库的使用


方式1:命令操纵数据库

在超级终端环境下创建数据库 stucomm.db,命令为 ./sqilte3 stucomm.db

(如果没有配置环境变量则要在 /opt/sqlite/bin 目录下输入命令)

在这里插入图片描述

创建数据表 stutable,字段包括 id 整型,name 字符型,phoneNum 字符型,具体命令为:

create table stutable(id integer, name text, phoneNum text);

插入2条记录,记录信息如下(001,zhangsan,10086)、(002,lisi,10000),具体命令为:

insert into stutable values(1, 'zhangsan', 10086);

insert into stutable values(2, 'lisi', 10000);

查询电话号码为 10086 的相关记录信息,命令为:

select * from stutable where phoneNum = 10086;

在这里插入图片描述

方式2:编程操纵数据库

使用 C编程模式 完成上述功能,代码如下:

#include<stdio.h>

#include"sqlite/sqlite3.h"

/*

(1)打开数据库:

int sqlite3_open(const char *filename, sqlite3 **ppDb);

  • filename:待打开(创建)的数据库文件名

  • ppDb:sqlite3数据库句柄的指针

(2)操作数据库:sqlite可以提供了接口,可以把SQL操作语句直接嵌入到sqlite函数中来执行。

int sqlite3_exec(sqlite3* ppDb, const char *sql,

int(callback)(void, int, char**, char**), void*, char **errmsg);

  • sqlite3* 是open函数得到的指针

  • constchar*sql是一条sql 语句,以\0结尾

  • sqlite3_callback 是回调,当这条语句执行之后,sqlite3会去调用这个函数

  • void*是调用者所提供的指针, 调用者可以传递任何一个指针参数到这里,

这个参数最终会传到回调函数里面, 如果不需要传递指针给回调函数,可以填 NULL

  • char** errmsg 是错误信息

(3)关闭数据库:数据库不使用后需要关闭。

int sqlite3_close(sqlite3 *ppDb);

*/

// 回调函数

int callback(void , int, char*, char**);

// 检查数据库操作是否正常执行

int check_opt(sqlite3 db, int nResult, char errmsg) {

sqlite3_close(db); // 关闭数据库

printf("%s", errmsg);

sqlite3_free(errmsg);

return 0;

}

int main() {

sqlite3 * db;

// 打开内存数据库

int nResult = sqlite3_open(":memory:", &db);

if (nResult != SQLITE_OK) {

printf("打开数据库失败\n");

return 0;

} else {

printf("打开数据库成功\n");

}

// 错误信息

char* errmsg;

nResult = sqlite3_exc(db, "create table stutable(id integer, name text, phoneNum text);",

NULL, NULL, &errmsg);

check_opt(db, nResult, &errmsg); // 检查操作是否正常执行

nResult = sqlite3_exc(db, "insert into stutable values(1, 'zhangsan', 10086);",

NULL, NULL, &errmsg);

check_opt(db, nResult, &errmsg); // 检查操作是否正常执行

nResult = sqlite3_exc(db, "insert into stutable values(1, 'zhangsan', 10086);",

NULL, NULL, &errmsg);

check_opt(db, nResult, &errmsg); // 检查操作是否正常执行

nResult = sqlite3_exec(db, "select * from stutable where phoneNum = 10086;",

callback, NULL, &errmsg);

check_opt(db, nResult, &errmsg); // 检查操作是否正常执行

int callback(void*, int nCount, char** pValue, cahr** pName) {

for (int i = 0; i < nCount; i++) {

printf("[%s] = [%s]\n", pName[i], pValue[i]);

}

return 0;

}

}

假设上述代码文件名为 sqlite_exp.c 文件,编译命令为:

arm-linux-gcc -o sql_exp sqlite_exp.c -l /opt/sqlite/include -L /opt/sqlite/lib

其中头文件位于 /opt/sqlite/include,库位于 /opt/sqlite/lib 下。

实验以外(有兴趣可以看看)


以上内容只是为了完成实验的报告。。。如果实际开发的话,我个人不推荐这么复杂的方式。

介绍一个更简洁的安装方法,在终端下输入以下命令:

sudo apt-get install sqlite3

之后在终端下输入如下命令,查看下安装好的 sqlite 的版本:

sqlite3 -version

在这里插入图片描述

然后安装 Sqlite3 编译需要的工具包:需要的话可以安装,非必要组件。

sudo apt-get install libsqlite3-dev


快速入门:

创建 Databases 文件夹:mkdir Databases

进入 Databases 文件夹:cd Databases/

sqlite3 test.db:若目录下存在 test.db 文件,则会打开该数据库文件,若不存在,则会创建一个数据库文件,并进入数据库操作。

在这里插入图片描述

查看数据库:.database

创建数据表:create table student(name varchar(10), age smallint);

查看数据表:.table

插入数据:

insert into student values('fck', 21);

insert into student values("shit",20);

查询数据:select * from student;

删除数据表:drop table student

退出数据库:.exit;

删除数据库:SQLite 无法同其他数据库那样删除数据库文件,即 DROP DATABASE test; 无效,但是我们可以直接像删除文件一样删除数据库文件,在 /Databases 目录下删除 test.db 文件即可。


安装其它语言的支持:

  • PHP支持:sudo apt-get install php5-sqlite

  • Ruby支持:sudo apt-get install libsqlite3-ruby

  • Python支持:sudo apt-get install python-pysqlite2


安装数据库可视化工具 sqlitebrowser:sudo apt-get install sqlitebrowser

sqlitebrowser 用法: sqlitebrowser test.db

在这里插入图片描述

实验二:嵌入式Qt实验

==============================================================================

吐槽:不是我说。。。学校这教材和实验都是百年不更新的么…

一、QT安装

=========================================================================

将 qt-sdk-linux-x86-opensource-2010.05.1.bin 拷贝到 /opt 目录下:

img img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取