APP下载

SQLite数据库在嵌入式系统中的应用研究

2015-09-21梁永恩万世明翟敏换广东白云学院电气与信息工程学院广州510450

现代计算机 2015年10期
关键词:控件菜品数据处理

梁永恩,万世明,翟敏换(广东白云学院电气与信息工程学院,广州 510450)

SQLite数据库在嵌入式系统中的应用研究

梁永恩,万世明,翟敏换
(广东白云学院电气与信息工程学院,广州 510450)

0 引言

随着用户对数据处理和管理需求的不断提高,越来越多的用户希望能对嵌入式产品中的数据进行更有效的管理。在嵌入式系统中大多采用文件或数据库的方式对数据处理。传统的小型嵌入式系统主要采用文件方式进行数据处理,它主要存在以下缺点[1]:数据共享性差;可移植行差,不同系统之间难以重用;数据管理能力差,查询和统计不便。而数据库弥补了文件的缺点,它具有以下优点:数据结构化;数据的共享性高,冗余度低,易扩充;数据独立性高;具有安全性保护、完整性检查、并发访问控制、故障恢复等数据控制功能。嵌入式数据库系统种类繁多,常用的嵌入式数据有:Advantage Database Server,Berkeley DB,Empress Embedded Database,eXtremeDB,InfinityDB,solidDB,SQL-ite,SQL Server Compact[2]。SQLite[3~4]数据库以开源、跨平台、体积小、安全性好、功能强大等优点在嵌入式系统领域获得了广泛的应用。

1 SQLite简介及其移植

1.1SQlite简介

SQLite是一个轻量级的关系数据库管理系统,它包含一个C编程库,提供了简单易用的API访问数据库。采用模块化设计,主要包含四个模块:核心(Core)、SQL编译器(SQL Compiler)、后端(Backend)和附件(Accessories),其体系结构如图1所示。其中,接口(Interface)以SQLite3作为前缀,提供对数据库访问操作的API;分词器(Tokenizer)的作用是把原始的字符串分割成标记,然后一个一个的传给语法分析器;语法分析器(Parser)通过分词器产生的标记分析语句的结构,并且得到一棵语法树;代码生成器(Code Generator)遍历语法分析器生成的语法树,产生执行SQL语句需要的虚拟机代码;虚拟机(Virtual Machine)用于执行代码生成器生成的代码,它是数据库中数据的最终操作者;B-tree模块负责对数据的查找和排序;页面缓存(pager)的任务是是读、写、缓存块;操作系统接口(OS Interface)为SQLite与不同操作系统之间的操作提供了一个统一接口的抽象层。

1.2SQLite在嵌入式linux中的移植

(1)建立SQLite环境:

①从http://www.sqlite.org下载SQLite源码包,此处下载的是sqlite-3.7.0.tar.gz。

②将下载的文件解压,将sqlite-3.7.0.tar.gz解压到/ home目录下,然后在/home目录下新建一个sqlite3-arm。

③设置交叉编译环境并在解压生成的sqlite-3.7.0目录下执行configure配置命令生成Makefile,注意修改配置项交叉编译器host及存放编译生成文件目录prefix,这里设置host为arm-linux,prefix为sqlite3-arm。

④编译并安装SQLite。

图1 SQLite体系结构

(2)移植SQLite数据库:

①移植可执行文件SQLite3,先用strip处理去掉其中的调试信息,为了减小执行文件大小,再把SQLite3下载到开发板的/usr/bin目录中

②移植库文件,去掉libsqlite3.so.0.8.6文件的调试信息后将其拷贝到开发板目录/usr/lib下,把libsqlite3.so 及libsqlite3.so.0链接到libsqlite3.so.0.8.6。

2 应用

2.1SQLite常用API

除可在SQLite环境下执行数据库操作外,SQLite提供了C语言的API,常用的API如下:

(1)打开SQLite数据库

int sqlite3_open(char*path,sqlite3**db);

说明:第1个参数为数据库文件路径,第2个参数为指向SQLite句柄的指针。执行成功返回0,失败返回错误码。

(2)关闭sqlite数据库

int sqlite3_close(sqlite3*db);

说明:执行成功返回0,失败返回错误码。

(3)执行SQL语句

int sqlite3_exec(sqlite3*,const char*sql,int(*callback)(void*,int,char**,char**),void*,char**errmsg);

说明:第1个参数为已打开的数据句柄的指针,第2个参数为一条SQL语句,第3个参数为回调函数(可填NULL),第4个参数为回调函数的第1个参数(可填NULL),第5个参数为错误信息。

2.2SQLite在点餐终端系统中的应用

在笔者实现的点餐终端系统中,选用SQLite数据库作为点餐数据的存储数据库,该数据库包含多张表,包括菜单信息(菜品ID、菜品名、单价、简介)、订单信息(订单ID、台号、菜品ID、数量等)、评价信息(订单ID、菜品ID、评价等级等)。界面显示使用Qt,通过调用SQLite3的接口函数实现数据库的访问操作,以下为部分代码:

(1)数据库操作相关变量

sqlite3*db;//数据库

char*errmsg=NULL;//错误信息

int ret;

int rownum;//列数

int columnnum;//行数

char**pazResult; //数据查询结果

(2)打开ordering数据库

ret=sqlite3_open("ordering.db",&db);if(ret!=SQLITE_OK)

{qDebug()<<"sqlite3 open error";}

(3)新建menu菜单信息表

//创建表,表中包含4个字段:菜品ID、菜品名、单价、简介

ret=sqlite3_exec(db,"create table menu(menuid varchar (10)PRIMARY KEY,name varchar(20),price float,summary varchar(80))",NULL,NULL,&errmsg);

if(ret!=SQLITE_OK)

{qDebug()<<"create table error";}

(4)插入数据到menu表

ret=sqlite3_exec(db,"insert into menu values('001','精选肥牛',35,'肉质细嫩,营养丰富')",NULL,NULL,&zErr Msg)

(5)界面显示

//可用QTableWidget控件显示表数据

QString name;//菜品名称

QString price;//单价

QString count;//菜品数量

int i,j,index;

QTableWidget*mytable=new QTableWidget(this);

//创建一个QTableWidget控件

mytable->setColumnCount(3);//设置列数为3

QStringListheadstrList;

headstrList<<"名称"<<"单价(元)"<<"数量";

mytable->setHorizontalHeaderLabels(headstrList);

//设置表头

ret=sqlite3_get_table(db,“select*from order”,&paz Result,&rownum,&columnnum,&errmsg);

if(ret==SQLITE_OK)

{index=columnnum;//第一行数据是字段名称,从columnnum索引开始才是真正的数据

for(i=0;i<rownum;i++)

{//读取订单信息表中的数据,逐行置于name、price、count变量中,然后将数据插入表格控件中

name=QString(pazResult[index++]);

mytable->setItem(i,0,new QTableWidgetItem(name);

price=QString(pazResult[index++]);

mytable->setItem(i,1,newQTableWidgetItem(price);count=QString(pazResult[index++]);

mytable->setItem(i,2,new QTableWidgetItem(count);

界面显示效果如图2所示。

图2 界面显示效果

3 结语

本文介绍了SQLite数据库的特点和体系结构,给出了SQLite在嵌入式Linux中的移植过程,并结合点餐终端系统实例讲解SQLite的应用方法。实践表明,在嵌入式系统中应用SQLite,系统运行稳定,数据库响应迅速,可有效满足嵌入式系统领域对数据管理的需求。

[1]谢辉.嵌入式数据库的设计与实现[D].太原:太原科技大学,2008

[2]蔡勇,王勇.嵌入式数据库SQLite在测控系统设计中的应用[J].电子测试,2011(10):89~93

[3]唐敏,宋杰.嵌入式数据库SQLite的原理与应用[J].电脑知识与技术,2008(02):51~54

[4]解辉,徐玉斌,李建伟,等.基于SQLite的嵌入式数据采集系统的研究[J].计算机与数字工程,2008(6):91~94

SQLite;Embedded System;Database

Research on the Application of SQLite Database in Embedded System

LIANG Yong-en,WAN Shi-ming,ZHAI Ming-huan
(School of Electrical and Information Engineering,Guangdong Baiyun University,Guangzhou 510450)

1007-1423(2015)10-0060-03

10.3969/j.issn.1007-1423.2015.10.017

梁永恩(1978-),男,广东广州人,硕士研究生,讲师,研究方向为嵌入式系统

万世明(1955-),男,湖北武汉人,硕士研究生,教授,研究方向为系统工程

翟敏焕(1983-),女,广东佛山人,硕士研究生,讲师,研究方向为自动控制

2015-01-29

2015-03-12

分析SQLite数据库的特点及结构,给出SQLite数据库在嵌入式Linux系统的移植过程,并结合具体事例介绍SQLite的应用。实践表明,在嵌入式系统应用SQLite数据库,可有效提高嵌入式系统处理数据处理能力,简化数据处理过程和提高数据管理的效率。

SQLite;嵌入式系统;数据库

广东白云学院2013年度科研项目(No.BYKY201319)

Analyzes the characteristics and the structure of the SQLite,gives the migration process of embedded Linux system with SQLite,and gives an example of the application of SQLite.Practice shows that the ability of embedded system can be effectively improved to deal with the data processing,simplify data processing and improve the efficiency of data management by using SQLite.

猜你喜欢

控件菜品数据处理
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
基于低频功率数据处理的负荷分解方法
团膳菜品质量管理存在的问题及完善策略
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
基于.net的用户定义验证控件的应用分析
迷惑菜品又来了
关于.net控件数组的探讨
假蒟叶系列菜品的开发利用现状
基于希尔伯特- 黄变换的去噪法在外测数据处理中的应用
基于嵌入式MINIGUI控件子类化技术的深入研究与应用