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