当前位置:网站首页>嵌入式实验三(代码几乎都要改才能运行)
嵌入式实验三(代码几乎都要改才能运行)
2022-08-03 05:21:00 【物腐虫生】
5.1 移植嵌入式数据库sqlite
第一步,解压缩sqlite源码,命令 tar xzvf sqlite-autoconf-3080900.tar.gz,在解压后的文件夹下,可以看到源码文件有_____sqlite3.c 和shell.c文件,生成Makefile的配置脚本文件configure,并检查当前文件夹下(A.存在 B.不存在)Makefile文件。
tar xzvf sqlite-autoconf-3080900.tar.gz
第二步利用configure脚本文件生成基于ARM实验台的Makefile,具体命令为 ./configure
CC=arm-linux-gcc-prefix=/opt/sqlite-host=arm-linux
踩坑踩坑: 若后续数据库操作使用编译生成的sqlite,不要添加删除线语句,即默认使用gcc编译(假设安装目录为/opt/sqlite),并检查当前文件夹下(A.存在 B.不存在)Makefile文件。
./configure -prefix=/opt/sqlite
第三步,编译sqlite,命令为make ,编译过程中使用的编译器为arm-linux-gcc
注意: 删除线语句不加入则使用的编译器为gcc。
第四步,安装sqlit,命令为make install。安装完成后到**/opt/sqlite** 文件夹下去查看相关文件,可以看到该文件夹下有____bin、include、lib_____和share文件夹,其中可执行文件sqlite3位于bin文件夹,库位于lib文件夹。
make
make install
第六步,数据库的使用
方式1:命令操纵数据库(该操作使用的sqlite为自行安装的最新版本sqlite3)
在超级终端环境下创建数据库stucomm.db,命令为sqlite3 stucomm.db;
创建数据表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;
sqlite语句一定记得要加;号
若前面安装的sqlite3无法使用,可根据系统提示安装最新的sqlite3进行实验:
sudo apt install sqlite3
sqlite3 stucomm.db
create table stutable(id integer ,name text,phoneNum text);
insert into stutable values(1,zhangsan,10086);
insert into stutable values(2,lisi,10000);
select * from stutable where phoneNum=10086;
方式2:编程操纵数据库
使用C编程模式完成上述功能,代码如下:
#include "sqlite3.h"
#include <stddef.h>
int main(int argc, char** argv)
{
sqlite3 * db = NULL;
char* zErrMsg = NULL;
int rc;
sqlite3_open( ":memory:", &db ); //打开内存数据库
rc = sqlite3_exec(db, "create table employee(id integer primary key, age integer);",NULL,0, &zErrMsg);//创建数据库
for( int i= 0; i < 10; i++ )
{
char* statement = sqlite3_mprintf( "insert into employee values(%d, %d);", NULL, 0, &zErrMsg, rand()%65535, rand()%65535 );
rc = sqlite3_exec( db, statement, NULL, 0 , 0 );//插入数据
sqlite3_free( statement );
}
rc = sqlite3_exec(db, "select * from employee;",0, 0, &zErrMsg );//查询,并调用回调函数
sqlite3_close(db);
}
假设上述代码文件名为sqlite_exp.c文件,编译命令为
gcc -o sqlite_exp sqlite_exp.c -L /opt/sqlite/lib -l sqlite3
注:在本机上需使用gcc,-l 后是头文件的路径,我是复制过去了,如果没复制就写上正确路径/opt/sqlite/include,库位于/opt/sqlite/lib下。
gcc -o sqlite_exp sqlite_exp.c -L /opt/sqlite/lib -l sqlite3
gcc -o sqlite_exp sqlite_exp.c -L /opt/sqlite/lib -l /opt/sqlite/include/sqlite3
边栏推荐
猜你喜欢
【DC-2 Range Penetration】
The ` monorepo ` ` hoist ` mechanism lead to the change of the loading configuration file path
Delightful Nuxt3 Tutorial (1): Application Creation and Configuration
深度学习入门之GRU
Apache2-XXE漏洞渗透
动态调整web主题(2) 萃取篇
Navicat 解决隔一段时间不操作出现延时卡顿问题
跨域错误的原因及处理方法
Playing with Markdown(2) - Extraction and Manipulation of Abstract Syntax Trees
经典论文-ResNet
随机推荐
机器码介绍
Pr第二次培训笔记
【XSS,文件上传,文件包含】
【Arduino】关于“&”和“|” 运算-----多个参数运算结果异常的问题解决
Haproxy服务监控
飞机大战完整版
uni-app 滚动到顶部/指定位置
小码农的第一篇博客
【CSRF,SSRF,XXE,PHP反序列化,Burpsuite】
Go (一) 基础部分2 -- if条件判断,for循环语句
MySQL 唯一索引 UNIQUE KEY 会导致死锁?
7.24[C语言零基础 知识点总结]
自定义封装组件-国际化-下拉搜索
Pr第四次培训笔记
Leetcode刷题——128. 最长连续序列
当我们在看Etherscan的时候,到底在看什么?
7.21[日常]
【DC-5靶场渗透】
MySQL EXPLAIN 性能分析工具详解
【三子棋】7.25