转自: http://www.mcu123.com/news/Article/ARMsource/Embedded/200811/4870.html
引 言
随着嵌入式系统的广泛应用及用户对数据处理和管理需求的不断提高,各种智能设备与数据库技术的紧密结合得到重视。这种数据库不仅具有传统数据库的主要功能,还具有嵌入式和支持移动技术两种特性,因此通常被用在掌上电脑、PDA、车载设备、移动电话等嵌入式设备中。这种数据库技术的兴起使人们不再受单一操作系统的限制,可以随时随地处理业务、传递信息。可以说,嵌入式数据库的发展提高了数据信息接入的普遍性,使人们随时随地获取信息的愿望成为可能。
1 嵌入式数据库系统的体系结构
嵌入式数据库将数据库系统与操作系统和具体应用集成在一起,运行在各种智能嵌入式设备上。与传统的数据库系统相比,它一般体积较小,有较强的便携性和易用性,以及较为完备的功能来实现用户对数据的管理操作。但是,由于嵌入式系统的资源限制,它无法作为一个完整的数据库来提供大容量的数据管理,而且嵌入式设备可随处放置,受环境影响较大,数据可靠性较低。在实际应用中,为了弥补嵌入式数据库存储容量小、可靠性低的不足,通常在PC机上配置后台数据库来实现大容量数据的存储和管理。嵌入式数据库作为前端设备,需要一个GUI交互界面来实现嵌入式终端上的人机交互,并通过串口实现和PC机上主数据源之间的数据交换,实现系统服务器端数据的管理,接收嵌入式终端上传的数据和下载数据到嵌入式终端机等操作。
2 SQLite的体系结构及开发技术
SQLite是D·理查德·希普开发的用一个小型C库实现的一种强有力的嵌入式关系数据库管理体制。它提供对SQL92的大多数支持:多表、索引、事务、视图、触发和一系列的用户接口及驱动。
2.1 SQLite的体系结构
SQLite可以分成8个主要子系统,如图1所示。顶层是标记处理器(tokenizer)和分析器(parser)。高度优化的分析生成器可以快速生成高效率的代码。底部是基于Knuth经过优化的B树。这样可以运行在可调整的页面缓冲(pagecache)上,有助于将对磁盘的查找减到最少。再往下是页面高速缓存。它作用在OS的抽象层之上,这样的安排有助于数据库的移动。体系结构的核心是虚拟数据库引擎(VDBE)。VDBE完成与数据操作相关的全部操作并且是客户和储存之间进行信息交换的中间单元。它是SQLite的核心。在SQL语句被分析之后,VDBE开始起作用。代码生成器将分析树翻译成一个袖珍程序,随后这些袖珍程序被组合成用VDBE虚拟机器语言表示的一系列指令。如此往复,VDBE执行每条指令,最终完成SQL语句指定的查询要求。VDBE的机器语言由围绕数据库管理的128个操作码(op—code)组成。对于打开表、查询索引、存储和删除记录以及很多其他数据库操作都有对应的操作码。VDBE里的每条指令由1个操作码和3个操作数(operand)组成。一些指令使用全部3个操作数,也有些指令一个也未使用。这完全取决于指令的性质。例如Open指令用于打开一个表的指针,使用了全部3个操作数:第1个操作数(P1)包含指针的ID号,第2个操作数(P2)指出表的根位置(或者表的首页位置),第3个操作数是表的名字。
2.2 SQLite开发技术
SQLite的API易于使用,只需要3个用来执行SQL和获得数据的函数。它还是可扩展的,允许程序员自定义函数,然后通过callback()函数集合进去。开放源码团体已经扩展了众多的客户接口、适配器、驱动等,这就使得其他语言使用SQLite也成为可能。
使用C语言API只需要三步。首先,提供文件名和访问模式,来调用sqlite_open()连接数据库。然后,执行callback()函数,SQLite通过对每个记录执行callback()函数获得从数据库那里得到的结果。最后,如果想执行一个SQL查询并获得一个callback()函数的指针,可以调用sqlite_exec()。另外还可以调用sqlite3_get_table()函数获得数据表单的内容。
SQLite还提供了存取二进制大对象(BLOB)的方法,同时在线程安全、数据库管理、API的扩展等方面也都提供了强大方便的技术支持。
3 SQLite在ARM9开发板上的编译及拷贝
在SQLite官方网www.sqlite.org下载SQLite-3.3.8版本,在终端解压生成SQLite-3.3.8目录。进入此目录,对sqlite/src/sqliteInt.h作一定的修改,以确保btree(B树)有正确的变量大小。不同体系结构的Linux会有些差别。对于ARM-Linux可找到如下部分:
这样后面的“typedef INTPTR_TYPE ptr;”就定义为“int”类型,而不是“long long”。
修改configure文件的内容,注释掉相关代码,让系统不去检查交叉编译环境,否则会出现错误,不能生成Makefile文件。然后新建一个文件夹sqlite-arm-linux来保存将要生成的库文件,运行以下命令进行配置:
将在本目录下生成Makefile文件。修改Makefile文件中如下语句,指定主机编译器为GCC:
这时就可以运行make & & make install命令开始编译,若无其他错误提示,则会在/../sqlite-3.3.8/sqlite-arm-linux/lib目录下生成库文件。主要有libsqlite3.so、libsqlite3.so.O、libsqlite3.so.O.8.6三个文件。同时在bin文件夹下生成了可执行文件sqlite3。为了减小执行文件大小,用strip命令处理去掉其中的调试信息。
库文件生成后,可以通过NFS(网络文件系统)把相关库文件拷贝到ARM开发板上,设置好主机NFS服务器,启动目标板后,执行:
其中192.168.1.101为NFS服务器IP,这样就把sqlite库文件所在文件夹挂载到了目标板上,拷贝时注意加上-arf选项,因为libsqlite3.so和libsqlite3.so.O是链接到Iibsqlite3.so.O.8.6的。
4 嵌入式数据库系统设计及实现
对嵌入式系统而言,强大的图形用户接口使系统的功能更加丰富。目前有众多的GUI可供使用,考虑到授权和价格的因素,我们在Qt/Embedded基础上进行数据库界面程序的开发,完成嵌入式数据库系统的设计。Qt良好的封装机制使Qt的模块化程度非常高,可重用性较好。嵌入式数据库系统的基本结构如图2所示。
通过Qt的QTable控件来实现数据表单的显示,通过QListView、QC20mBobox以及QTextEdit等控件进行数据表单的选择、数据输入等,配合PushButton控件实现数据表的创建、删除和数据查询、添加、删除、修改等操作。这样,实现数据库系统的基本管理,并可利用串口实现与后台数据库之间的数据交互。本系统利用Qt Designer实现数据库界面的快速开发,并通过调用SQLite的API接口函数实现数据库的基本操作。下面简要介绍一下用QtDesigner开发数据库界面的基本方法及关键代码。新建一个C++项目,在此基础上新建一个窗口部件,在窗口部件上添加一个Table控件作为数据表单的显示界面。另根据需要,添加PushButton控件以实现相应的操作。在窗口类下新建一个槽,命名为SelectSlot()。连接相关按钮信号,关键代码如下:
其中tableView函数的作用是将查询得到的数据表显示在Table控件中。函数体程序如下:
终端下进入工程目录,修改*.pro文件,并添加如下内容:
这里加入了编译程序所需库文件的路径以及sqlite.h头文件的路径。这一切做好后,开始编译。
tmake-o Makefile EDBMS.pro生成Makefile,将其中的编译工具改为arm-linux-g++,加上交叉编译的相关库文件。然后make编译,生成能在ARM开发板上运行的二进制文件,并且通过NFS挂载到开发板上。运行./EDBMS,会出现我们设计的窗口界面。查询一个数据表的内容并显示在QTable控件上,主界面效果如图3所示。
另外,系统运用SQL Servqr。2000作为后台数据库,用VB 6.O开发,通过ODBC与数据库连接,实现后台数据库管理,并负责接收和处理客户端请求。PC机与嵌入设备端则可以通过串口进行通信,以完善系统功能。这样,一个较为完备的嵌入式数据库系统就构建起来了。
结 语
本文在对嵌入式数据库特性研究的基础上,设计出一种嵌入式数据库系统的体系结构。结合嵌入式数据库的特点,运用SQLite在ARM-Linux平台上构建嵌入式数据库系统。在此基础上利用Qt设计了数据库界面,使用SQLite的API实现数据库的基本操作。最后对后台数据库的配置及串口通信机制做了简要介绍,完成了整个嵌入式数据库系统的构建。
分享到:
相关推荐
本文主要研究了基于ARM-Linux平台的SQLite嵌入式数据库的设计和实现。SQLite是一个开源的嵌入式关系数据库引擎,具有体积小巧、高速高效、稳定可靠、可移植性等特点,非常适用于嵌入式环境下的数据管理。 在Linux...
嵌入式数据库与其它数据库产品的区别是,前者是程序驱动式, 而后者是引擎响应式。嵌入式数据库的一个很重要的特点是它们的体积非常小,编译后的产品也不过几十K。这不但对桌面程序的数据存储方案是一个很好的选择,...
本文对基于ARM-Linux实现SQLite嵌入式数据库进行了详细的分析和讨论,介绍了Linux下的常见数据库技术、嵌入式系统开发中对数据库的需求特点、SQLite嵌入式数据库的体系结构和开发技术,并结合ARM-Linux开发平台讲述...
在设计和实现 SQLite嵌入式数据库引擎时,需要使用基于UML的关系型数据库分析设计方法。通过使用UML面向对象工具对系统进行分析和建模,从中发掘那些具有持久性的类,并将它们转化为数据库实体。 七、结论 SQLite...
【Java在SQLite嵌入式数据库中的应用】 在许多软件开发场景中,特别是在移动设备和桌面应用程序中,嵌入式数据库由于其轻量级、高效的特点,成为了一个理想的选择。SQLite是一个开源的嵌入式数据库系统,它具有体积...
概述:本文主要讨论了基于ARM-Linux的SQLite嵌入式数据库技术,分析了Linux下的常见数据库技术,指出了嵌入式系统开发中对数据库的需求特点,并讨论了SQLite的体系结构和开发技术。 知识点一:嵌入式数据库技术概述...
JAVA在SQLite嵌入式数据库中的应用,很专业的问题
嵌入式系统与ARM技术中的SQLite嵌入式数据库系统研究与实现主要关注的是如何在有限资源的嵌入式设备上实现高效、可靠的数据库管理。随着嵌入式技术的普及,智能设备对数据处理的需求日益增长,嵌入式数据库成为了...
SQLite是一款开源、轻量级的嵌入式数据库系统,它完全用C语言编写,具有高度移植性。在本文中,我们将深入探讨SQLite的特性和应用,以及如何在项目中使用和测试它。 SQLite的设计目标是提供一个易于集成、无需单独...
### SQLite嵌入式数据库的应用研究知识点详述 #### 一、引言与背景 - **嵌入式数据库系统概述**:随着技术的发展,嵌入式系统越来越多地被应用于日常生活中的各种设备,如智能手机、平板电脑、智能手表等。为了更好...
"基于ARM-Linux的SQLite嵌入式数据库技术" 知识点一:嵌入式数据库技术概述 ...基于ARM-Linux的SQLite嵌入式数据库技术应用可以满足嵌入式系统对数据库的需求,提供快速、可靠、功能齐备的数据库解决方案。
总结来说,SQLite嵌入式数据库不仅满足了嵌入式系统对数据库的基本需求,而且其良好的性能和轻量级特性使得它在图象处理等领域发挥出了重要作用。通过合理的设计和应用SQLite,开发者可以构建出高效、稳定且功能强大...
基于ARM-Linux的SQLite嵌入式数据库技术是一种嵌入式系统开发中常用的数据库技术。该技术结合了ARM-Linux开发平台,旨在解决嵌入式系统中数据处理和管理的问题。 在Linux下,存在多种数据库技术,包括PostgreSQL、...
SQLite 是一款轻量级的嵌入式数据库,它被广泛应用于各种桌面、移动和Web应用程序中。这个PPT深入介绍了SQLite的特点、优缺点以及在不同场景下的应用。 SQLite的介绍: SQLite于2000年由D. Richard Hipp开发,自...
总的来说,"sqlite3嵌入式数据库加密"涉及了SQLite3数据库与Qt的集成,使用SQLCipher库来实现数据加密,以及如何在Qt应用程序中创建、管理和测试加密的SQLite3数据库。这个主题对于那些需要在Qt应用中处理敏感数据的...
嵌入式数据库通常与特定的嵌入式操作系统紧密结合,无需独立的数据库服务器,而是通过应用程序直接调用数据库API来实现数据的存储和检索。这使得嵌入式数据库具有以下几个显著特点: 1. **体积适当**:考虑到嵌入式...
嵌入式数据库SQLite与Java2009-01-06 19:54SQLite作为一个开源的嵌入式数据库产品,具有系统开销小,检索效率高的特性,适用于手机、PDA、机顶盒设备等电器,并且作为嵌入式数据库在可下载的消费类应用程序中运行的...