嵌入式数据库SQLite应用研究外文翻译资料

 2022-01-06 09:01

2019年信息技术与应用国际论坛

嵌入式数据库SQLite应用研究

Lv Junyan,Xu Shiguo,Li Yijie

辽宁工业大学经济信息工程学院,葫芦岛,125105

Lvjunyan_2002@163.com

简介:传统的数据库并不能在嵌入式系统中用作数据管理。然而,开源嵌入式数据库SQLite因其特性能更好地满足嵌入式系统的需求。通过对嵌入式数据库特点和SQLite特点,以及其内在结构组成和API功能的分析,我们构建了一个ARM-Linux的模拟环境,实现了SQLite在ARM-Linux平台上的成功运行,包括交叉编译、过渡过程和应用开发,我们也实现了基于Qt/Embedded的图形用户界面设计。嵌入式数据库系统满足系统数据管理的需要,并且对指导嵌入式系统开发的理论和实践都具有重大的意义。

关键词:嵌入式系统;嵌入数据库;SQLite的;交叉编译

1 引言

嵌入式系统的软硬件资源有限,嵌入式应用的实现比较单一,对数据处理和维护能力要求不高,所以传统的数据库不能用于嵌入式数据管理系统。必须使用嵌入式数据库来满足嵌入式系统的需求,这种系统体积小,速度快,简单,可靠,易于移植。通过对许多嵌入式数据库的比较,我们发现SQLite具有强大、快速、简单的接口以及占用空间小等特殊优势,因此特别适用于嵌入式环境。本文将重点介绍如何在SkyEye平台上模拟ARM-Linux操作系统,如何在ARM-Linux平台上交叉编译SQLite3,实现平台中的SQLite应用程序开发以及基于Qt/Embedded的用户图形界面设计。SQLite3使用C语言作为开发语言,因此具有良好的可移植性。这里提到的方法也适用于其他操作系统平台而无需太多修改。 SQLite是一个开源的嵌入式数据库系统,具有开销小,搜索效率高的特点,特别适用于手机,PDA,机顶盒和其他电子设备,在能够被下载的消费类应用中具有良好的运行能力。

2 嵌入式数据库的特点

由于硬件和软件资源有限,无法在嵌入式数据库系统中安装庞大的数据库服务器。但是,用户的需要可能是一个作为简单文档存在于磁盘中的数据库系统。系统只是使用了数据库的基本功能。由于应用环境的特殊限制,嵌入式数据库与普通数据库系统相比具有自己的特点:占用存储空间小,可靠性高,可管理性和安全性,互操作性,定制性,可移植性,高性能,低成本,嵌入式,功能齐全等特点。

3 嵌入式数据库SQLite

SQLite是一个由D. Richard Hipp在2000年使用C语言编写的开源的嵌入式数据库。它是完全独立的,没有外部依赖性,可以更容易地在嵌入式系统中使用,并且可以在所有主要操作系统中运行、支持大多数计算机语言。

A SQLite的特点

虽然SQLite是一个非常轻量级的关系数据库,但它保留了大部分数据库的功能。其主要特点如下:

  • 即使在系统崩溃和电源故障之后,事务也是原子的,一致的,隔离的和持久的(ACID)。
  • 零配置,无需设置或管理。
  • 完整的数据库存储在单个跨平台磁盘文件中。
  • 支持TB级数据库和千兆字节大小的字符串和二进制大对象。
  • 小代码占用:完全配置小于275KB。
  • 比大多数常见操作的流行客户端/服务器数据库引擎更快。
  • 简单易用的API。
  • 自包含:没有外部依赖。
  • 跨平台,很容易移植到其他系统。
  • 来源属于公共领域。

B SQLite的内部结构

SQLite的内部结构由以下组件组成:SQL编译器,内核,后端以及附件。内部结构如图1所示:

图1 SQLite的内部结构

接口是一个C语言库,可以接收多种语言的API,但底层的实现是C语言库。当实现包含该字符串的SQL语句时,接口程序将该字符串传递给编译器。编译器将原始字符串分解为解析器标识的指示符,并将这些指示符传递给解析器。解析器收集符号之后,将它们转换为完整的SQL语句,然后调用代码生成器生成虚拟机代码,虚拟机代码交给虚拟机实现并完成SQL语句。SQLite体系结构的核心是虚拟数据库引擎(Virtual Database Engine,VDBE)。VDBE完成与数据处理相关的整个任务,它是客户与存储之间信息交换的中间单元。SQLite数据库存储在磁盘中,由源文件btree.c中的B-tree实现,它通过可调页面缓存(寻呼机)快速搜索和访问数据。为了便于移植,SQLite操作系统的接口程序使用层提取。实用程序主要实现了内存分配,字符串比较,语法分析,语法分析中符号表的存储以及SQLite的专业打印功能和随机数功能。一半以上的SQLite函数可以使用测试代码调试,并模拟了在系统崩溃时SQLite的恢复机制。

C SQLite的API函数

嵌入式数据库SQLite提供了C语言的API接口,使得数据库的操作非常简单。下面的章节将简要介绍一些功能:

1)SQLite3的C/C 常用接口

typedef struct sqlite3 sqlite3;

int sqlite3_open(const char*, sqlite3**);//打开数据库,包括文档和内存数据库。
int sqlite3_close(sqlite3*);//关闭数据库。

int qlite3_last_insert_rowid(sqlite3*);//最后插入数据库的行。

const char *sqlite3_errmsg(sqlite3*);/获取相应的错误代码介绍。这些错误消息将以UTF-8返回,并在下次调用任何SQLite API函数时被删除。
int sqlite3_errcode(sqlite3*);//获取调用最近API接口的错误代码。

2)SQLite的不同实现方法

  • 执行一条或者多条SQL语句,并且在每行查询结果上实现回调函数:int sqlite3_exec();
  • 动态构造SQL查询语句:char *sqlite3_mprintf(const char*,...);

char *sqlite3_vmprintf(const char*, va_list);

//结构与语句,由sqlite3_exe执行int sqlite3_exec_printf();

//结构化查询语句并且执行voidsqlite3_free(char *z);

// 由sqlite3_(v)来释放分配的内存

  • 预编译SQL语句,减少SQL分析的时间:
    int sqlite3_prepare();//预编译
    int sqlite3_step(sqlite3_stmt*);//执行一次或多次
    int sqlite3_reset( sqlite3_ stmt*);

// reset sqlite3_stmt(来自sqlite3_prepare())

int sqlite3_finalize(sqlite3_stmt *pstmt);

//发布

  • 利用有关sqlite3_exec()的封装并返回所有结果:

int sqlite3_get_table();

void sqlite3_free_table(char **result);

4 ARM-Linux平台上的SQLite

在比较和研究了不同的嵌入式数据库系统后选择了SQLite数据库。SQLite发布源代码,可以移植到大量的硬件平台上,源代码可以根据不同的平台进行交叉编译。由于ARM核心处理器广泛应用于嵌入式系统领域,ARM-Linux平台已经在许多嵌入式操作系统中得到广泛应用。为了节省成本,提高开发效率,首先将ARM-Linux操作系统移植到SkyEye平台进行仿真,经过调试和运行良好后,SQLite在ARM-Linux平台上进行交叉编译。

A 构建ARM-Linux的仿真操作环境

SkyEye平台是硬件开发板的变体和扩展。它利用软件技术来模拟真实的硬件环境,你可以忽略大量的细节硬件,提高设计效率,缩短软件产品的设计周期。 ARM-Linux是一个优秀的实时嵌入式操作系统,因此移植到SkyEye平台的ARM-Linux具有一定的实际意义。

ARM-Linux将在SkyEye平台上构建。为了能够在ARM-Linux中运行自己的应用程序,需要明确表达NFS。其实现包括以下步骤:

1)安装skyeye

  • 选择skyeye1.2.4版本,首先解压缩源包:
    #tar xzf skyeye-e-1.2.4_Rel.tar.gz
    #cd skyeye-1.2.4
  • 为了在运行它的ARM-Linux上清晰地表达NFS,我们需要修改device/net/dev_net_cs8900a.c,将修改后的文件保存为dev_net_cs8900a.c,替换未修改的旧文件,然后实现编译器:
    #make NO_DBCT = 1 NO_BFD = 1。
  • 编译生成的skyeye是二进制文件后,将其复制到/usr/local/bin/:

#cp binary/skyey/usr/lonal-bin

2) 编译内核,选择Linux版本为2.6.14.tar.bz2,,交叉编译工具arm-linux-gcc 3.4.1,如下面的步骤:

  • 设想核心资源包在/root目录中,首先,解压资源:

#cd /root

#tar xjf linux-2.6.14.tar.bz2

  • 进入核心目录: #cd linux-2.6.14,修改该目录下的Makefile。
  • 生成默认的内核配置文件(针对于s3c2410):#make smdk2410_defconfig。
  • 将cs8900网卡驱动程序添加到核心以支持NFS安装。
  • 修改核心文件。
  • 剪切并自定义内核。首先,设置命令#make menuconfig,然后是start-core的参数和CS8900的支持,初始化内存盘,NFS,ROM文件系统和ext2。
  • 编译#make。编译完成后,当前目录中会有一个vmlinux,这就是需要的arm-linux内核。

3)创建根文件系统initrd.img(初始RAM磁盘)。选择版本Busybox-1.9.2.tar.bz2,以静态方式编译它。

通过在arm-linux中阐述NFS,我们可以将armlinux-gcc编译器的库文件清楚地表达到arm-linux的目录/lib,然后我们就可以运行自己的程序了。以下步骤是:提取源包,修改Makefile,自定义busybox,实现make compiling和make initrd.img。

4)运行arm-linux。配置文件Skyeye.conf并运行arm-linux的模拟。

5)在arm-linux中运行自己的程序。

首先,在arm-linux的主机中配置NFS服务,然后编辑文件/etc/exports,配置主机的ip,重新启动nfs服务,在skyeye中运行arm-linux并配置其ip,在skyeye中运行arm-linux并演示安装的nfs。

为了确认arm-linux能够与主机通信,我们可以相互使用ping,直到它们可以相互通信。

B 在ARM-Linux平台上实现SQLite
SQLite在ARM-Linux平台上编译,包括以下步骤:

  • 从http://www.sqlite.org/中下载sqlite-3.6.3.tar.gz到/root目录,解压缩并从pigeonholed文件中提取文件和目录。然后它将在/root目录中生成sqlite-3.6.3/子目录。
  • 使用命令“echo $ PATH”检查交叉编译器工具arm-linux-gcc是否已包含在PATH中。
  • 手动修改Makefile文档,无法配置脚本生成Makefile文档。首先,通过命令 #cp Makefile.linux-gccMakefile复制Makefile Makefile.linux-gcc的示例文件到sqlite-3.6.3/目录下,重命名文件Makefile,然后使用vim手动打开Makefile文件并且修改它。原则上,对Makefile的修改主要包括两个方面:首先,将编译器,归档等工具更改为跨工具链中的相应工具,例如gcc替换为arm-linux-gcc,ar替换为ar-linux-ar,用arm-linux-ranlib替换了ranlib,依此类推;然后,删除与TCL相关的编译器选项。因为默认情况下,与SQLite绑定的TCL语言将被编译,但是当被移植到ARM-Linux平台上时,它并不需要。因此注意到与TCL相关的两线;它依旧需要手动修改main.mk文件,使用 select.o table.o tclsqlite.o tokenize.o trigge

    全文共10280字,剩余内容已隐藏,支付完成后下载完整资料


    资料编号:[2015]

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。