嵌入式Linux中使用SQLite3数据库

嵌入式Linux中使用SQLite3数据库

SQLite3是一款轻量级的文件型数据库,非常适合嵌入式环境下使用,最近搞的Linux嵌入式项目中需要用到这款数据库,就研究了一下怎么在嵌入式Linux中使用,记录下来以备查用。
我的嵌入式核心板MPU用的是TI的AM3352这款A8单核处理器,交叉编译环境安装在虚拟机的国产Linux系统Deepin中,顺便吐槽一下,大部分网上教程都是用ubuntu来建立交叉编译环境,做嵌入式开发用个桌面版就足够,建议大家不妨用用Deepin,更符合国人的使用习惯,很多软件都自带不需要重新安装。用了一段时间感觉还不错。交叉编译工具用的是GNU的arm–none-linux-gnueabi这款交叉编译工具。怎么在Ubuntu或DeepIn中搭建32位arm的交叉编译环境就不在这赘述了,网上有很多文章。
1.首先去SQLite官网下载最新源码,如下图: 下载源码
注意要下载带编译配置工具的这个。
2.拷贝到虚拟机的Deepin系统中,解压缩到用户目录中,在桌面直接解压缩或用终端命令解压缩也行,解压缩命令:tar -zxvf sqlite-autoconf-3380500.tar.gz。
3.进入解压目录,打开终端,如下图:

运行编译配置命令:./configure --host=arm-none-linux-gnueabi --prefix=/home/xxx/dist-arm-sqlite3
这里要注意的是配置命令有两个参数:
–host 这个参数是将编译工具配置为本虚拟机上安装的交叉编译工具,注意”arm-none-linux-gnueabi”这是交叉编译工具的前缀名,完整的gcc交叉编译工具名是:“arm-none-linux-gnueabi-gcc”。
–prefix 这个参数是配置编译完成后安装时将SQLite3的编译生成文件安装到的绝对目录的路径。这个自己定义一个有写入权限的目录即可。
配置过程如下图:

4.最后运行编译和安装命令:make && make install
等待一段时间等编译和安装完成后打开前面设置的目录,里面就是编译安装后的结果,如下图:

其中“bin”目录里的sqlite3文件是在嵌入式Linux中运行的sqlite3的命令行工具,“include"目录下是C/C++开发用的头文件,”lib"目录是sqlite3的静态库和动态库文件。所以我们开发要用的就是“include”目录和"lib"目录。
这样sqlite3在嵌入式Linux中开发需要的文件就都有了,可以用程序测试一下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <fcntl.h>
#include <time.h>
#include "sqlite3.h"

char        DBFileName[80];
char        DBTableName[20];

int main(  int argc,char* argv[] )
{
	char 		SqlStr[256];
	char*        ErrMsg;
	char 		str[64];
	int			startidx;
	int         i1, rc;
	time_t      t;
	struct tm   *p;
	sqlite3*     db;
	
	startidx = 0;
	strcpy( DBFileName, "/mnt/nandflash/test.db");
	strcpy( DBTableName, "table1");

	//创建数据库文件
	rc = sqlite3_open( DBFileName, &db );

	sprintf( SqlStr, "create table %s(Name char(50), Value int, Date char(50))",
			         DBTableName );
	//创建表
	sqlite3_exec( db, SqlStr, 0, 0, &ErrMsg );

	//往表里插入10条记录
	for( i1=startidx; i1<startidx+10; i1++ )
	{
		time( &t );
		p = localtime ( &t );
		sprintf( str, "%d.%d.%d-%d:%d:%d\n", p->tm_year + 1900, p->tm_mon+1, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec );
		printf("%d\n", i1+1);
		sprintf(SqlStr, "insert into %s values(\"Name%d\", %d, \"%s\")",
				         DBTableName, i1+1, i1+1, str );
		sqlite3_exec( db, SqlStr, 0, 0, &ErrMsg );
		sleep(1);
	}

	sqlite3_close( db );

	return 0;
}

码字不易,如果本文对您有用请随手点个赞,谢谢!^_^

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值