SQLite3移植到ARM开发板

SQlite3的了解

SQLite3是一个软件库,实现了自给自足的、无服务器的、零配件的、事务性的SQL数据引擎;在具有和Oracle、MySQL这种大型的数据库几乎相同的功能下只有2W+行的代码,并且是采用C语言编写的;它运行所占用的内存比较少,所以比较适合于嵌入式系统当中。
同时SQLite3还支持Shell运行,它为C/C++提供了相对简单的API接口函数,这使得开发中会相对简单便捷;

移植SQLite3到运行Linux系统的ARM开发板中

  1. 先到官网下载SQLite3的源码,下载地址:https://www.sqlite.org/download.html(记得是第二个)
    在这里插入图片描述

  2. 解压、进入到SQLite3目录当中,创建一个install目录(存放生成的可执行文件以及链接库等等),修改configure脚本文件

./configure --host=arm-linux  --prefix=$PWD/instasll CC=arm-linux-gcc//使用此命令重新修改configure脚本文件

在这里插入图片描述

  1. 执行make、make install既可以在刚刚新建的目录中找到相关的可执行文件、链接库等文件
    在这里插入图片描述
1、bin下面是可执行文件sqlite3
2、include下面是一些相关的头文件等
3、lib下面是链接动态库和静态库(这些都是我们要用到的)
  1. 将相关的链接库以及可执行文件sqlite3移植到开发板中即可用命令的形式或者接入函数API接口去处理SQLite数据库
    在这里插入图片描述
在命令形式下:
sqlite3文件的命令是以”.“开头的,可以使用”.help“查看具体的信息,”.quit“是退出;
同样的sqlite3可以使用sql语句,而sql语句都应该以”;“结尾
  • Shell命令下创建数据库:
    在这里插入图片描述
  • 调用函数的API接口使用,代码如下:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include "sqlite3.h"

  
#define DATABASE  "nilko.db"
char *errmsg;

int do_insert(sqlite3 *db)
{
	if(db == NULL)
	{
		printf("open err\n");
		return -1;
	}

	char sql[100];
	char name[20] = {};
	int score;
	int id;

	printf("Input id:");
	scanf("%d",&id);
	getchar();

	printf("Input name:");
	scanf("%s",name);
	getchar();

	printf("Input score:");
	scanf("%d",&score);
	getchar();

	sprintf(sql,"insert into stu values(%d,'%s',%d);",id,name,score);

	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("%s\n",errmsg);
		return -1;
	}
	printf("insert done\n");
}

int do_delete(sqlite3 *db)
{
	if(db == NULL)
	{
		printf("open err\n");
		return -1;
	}

	char sql[100];
	int id;
	

	printf("Input delete id:");
	scanf("%d",&id);

	sprintf(sql,"delete from stu where id=%d;",id);

	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("%s\n",errmsg);
		return -1;
	}
	printf("delete done\n");
}

int do_update(sqlite3 *db)
{
	if(db == NULL)
	{
		printf("open err\n");
		return -1;
	}

	char sql[100];
	char name[20] = {};
	int score;
	int id;

	printf("Input update id:");
	scanf("%d",&id);

	printf("Input update score:");
	scanf("%d",&score);

	sprintf(sql,"update stu set score = %d where id = %d;",score,id);

	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("%s\n",errmsg);
		return -1;
	}
	printf("update done\n");
}

int callback(void *arg,int f_num,char **f_value,char ** f_name)
{
	int i = 0;
	for(i = 0; i < f_num; i++)
	{
		printf("%s\n",f_value[i]);
	}
	putchar(10);

	return 0;
}

int do_query(sqlite3 *db)
{
	if(db == NULL)
	{
		printf("open err\n");
		return -1;
	}

	char sql[100] = {};	

	sprintf(sql,"select * from stu;");

	if(sqlite3_exec(db,sql,callback,NULL,&errmsg) != SQLITE_OK)
	{
		printf("%s\n",errmsg);
		return -1;
	}
	printf("select ok\n");
}

int main(int argc,char *argv[])
{
	int input = 0;
	sqlite3 *db;

	if(sqlite3_open(DATABASE,&db) != SQLITE_OK)
	{
		errmsg = sqlite3_errmsg(db);
		printf("%s\n", errmsg);
		return -1;
	}
	printf("open nilko.db\n");
	

	if(sqlite3_exec(db,"create table stu(id Integer,name char,score Integer)",NULL,NULL,&errmsg) != SQLITE_OK)
	{
		printf("%s\n",errmsg);
		return -1;
	}
	printf("create stu ok\n");
	
	while(1)
	{
		printf("*******************************************************\n");
		printf("1:insert;2:delete;3:query;4:updata;5:quit\n");
		printf("please input number:\n");
		printf("*******************************************************\n");
		printf("please input number:");
		scanf("%d",&input);

		switch(input)
		{
			case 1:
				do_insert(db);
				break;
			case 2:
				do_delete(db);
				break;
			case 3:
				do_query(db);
				break;
			case 4:
				do_update(db);
				break;
			case 5:
				sqlite3_close(db);
				exit(0);
			default:
				printf("please input once again\n");
				break;		
		}
	}

	return 0;
}

注意:编译的时候应该链接上刚刚生成的库以及包含头文件 -lsqlite3

  • 测试:
  • 在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
注意:API函数接口中有许多函数可以去官网了解具体的函数调用方法,这里暂时只用到了几个函数
sqlite3_open( ):打开数据库的函数;
sqlite3_close( ):关闭数据库的函数;
sqlite3_exec( ):执行SQL语句的函数;
sqlite3_errmsg( ):数据库执行错误返回的语句;
注:调用sqlite3_exec( )进行查询的时候会使用到回调函数,即每查询一次就会调用一次回调函数,所以可以在回调函数中进行事务处理;

好了,大概的操作就是这样~
最后,多多指教~

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值