实验十六 嵌入式数据库实验_第1页
实验十六 嵌入式数据库实验_第2页
实验十六 嵌入式数据库实验_第3页
实验十六 嵌入式数据库实验_第4页
实验十六 嵌入式数据库实验_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验十六 嵌入式数据库移植实验【实验目的】1、了解嵌入式数据在嵌入式设备中应用2、了解SQLite的移植和编译过程3、掌握嵌入式数据库的编程方法【实验原理】1、SQLite介绍SQLite 是 D. Richard Hipp 用 C 语言编写的开源嵌入式数据库引擎。它是完全独立的,不具有外部依赖性。占用资源非常低,在嵌入式设备中,只需要几百K的内存就够了。它能够支持Windows/Linux等主流操作系统,可与TCL、PHP、Java等程序语言相结合,提供ODBC接口,其处理速度甚至令开源世界著名的数据库管理系统Mysql、PostgreSQL望尘莫及。SQLite 对SQL92 标准的支持包

2、括索引、限制、触发和查看,支持原子的、一致的、独立和持久(ACID)的事务。在内部,SQLite 由SQL 编译器、内核、后端以及附件几个组件组成,如图16-1所示。SQLite 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展 SQLite 的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite 虚拟机中执行的程序集。图 16-1 SQLite的内部结构2、sqlite的移植(1)、源代码的下载从/download.html下载sqlite的源码sqlite-3.3.5.tar.gz,将下载的代码包解开,将生成sqlite

3、-3.3.5目录。(2)、对配置文件configure的修改在交叉编译sqlite时,编译工具文件的编译器采用的是gcc,而不是arm-linux-gcc,如果直接采用./configure -host=arm-linux命令对系统进行编译配置,configure配置文件在检查编译器时会错,所以应将configure配置文件中的交叉编译的检查语句注释掉,然后再手动增加编译工具文件的编译器gcc。将configure文件中的如下交叉编译器的检查语句注释掉(前面加#字符):# if test "$cross_compiling" = "yes" then#

4、echo "$as_me:$LINENO: error: unable to find a compiler for building build tools" &5#echo "$as_me: error: unable to find a compiler for building build tools" >&2;# (exit 1); exit 1; ; # fi-#else# test "$cross_compiling" = yes &&# echo "$as_me:$LIN

5、ENO: error: cannot check for file existence when cross compiling" &5#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;# (exit 1); exit 1; ; -#else# test "$cross_compiling" = yes &&# echo "$as_me:$LINENO: error: cannot che

6、ck for file existence when cross compiling" &5#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;# (exit 1); exit 1; ; 修改完毕后,在源代码目录下执行编译配置命令rootlocalhost sqlite-3.3.5$./configure -host=arm-linux -disable-tcl (3)、修改Makefile文件将Makefile文件中编译工具的编译器修

7、改为gcc,即将Makefile中的BCC = arm-linux-gcc -g -O2修改为BCC = gcc -g -O2。 (4)、编译和安装将Makefile文件修改后,在源代码目录中执行make编译命令,编译后的库文件和可执行文件保存在当前目录下的隐藏文件夹.libs中,然后执行make install安装命令,共享库文件libsqlite3.so.0.8.6及相关的符号链接文件复制在/usr/local/lib目录下,头文件sqlite3.h复制在/usr/local/include目录中。rootlocalhost sqlite-3.3.5$makerootlocalhost s

8、qlite-3.3.5$make install(5)、编译脚本的编写为了不修改配置文件configure和编译文件Makefile,可以将编译过程写成脚本的形式Makefile.sh或自己重写编译文件Makefile.mk,下面给出编译脚本Makefile.sh和Makefile.mk的具体内容(见光盘中实验十六源代码目录下sqlite-3.3.5-arm.tar.gz中的内容)和使用方法。  编译脚本的使用方法编译脚本是一个可执行的文件,在源代码所在的目录下利用文本编辑器新建编译脚本文件Makefile.sh(内容如下),然后利用chmod命令将其属性改成可执行文件并运行脚本即可

9、完成上述编译的全过程。rootlocalhost sqlite-3.3.5 chmod 755 Makfile.shrootlocalhost sqlite-3.3.5 ./Makfile.shMakefile.sh的内容:#!/bin/sh#compile script for sqlite-3.3.5echo "config."export config_BUILD_CC=gcc && export config_TARGET_CC=arm-linux-gcc && export ARCH=arm &&echo ac_cv

10、_header_readline_h=yes >$ARCH-linux.cache && ./configure -host=$ARCH-linux -disable-tcl -cache-file=$ARCH-linux.cache && echo "config done"make && make install && echo "build done"arm-linux-strip .libs/libsqlite3.so.*if -e Makefile ; then make d

11、istclean; fi && echo "clean done"  编译文件Makefile.mk的使用方法本系统编写的编译文件Makefile.mk是一个类似于Makefile的编译文件。在源代码所在的目录下利用文本编辑器新建编译文件Makefile.mk(内容如下),然后利用make all f Makefile.mk即可完成上述编译的全过程,也可根据Makefile的伪目标编译方法逐项进行编译。(具体参考Makfile实验)rootlocalhost sqlite-3.3.5 make all f Makfile.mkMakefile.mk

12、的内容:#compile file Makefile.mk for sqlite-3.3.5all: clean config buildconfig:echo "config parament."export config_BUILD_CC=gcc && export config_TARGET_CC=arm-linux-gcc && export ARCH=arm &&echo ac_cv_header_readline_h=yes >$ARCH-linux.cache && ./configure

13、-host=$ARCH-linux -disable-tcl -cache-file=$ARCH-linux.cache && echo "config done"build :make && make install && echo "build done"arm-linux-strip .libs/libsqlite3.so.*clean:if -e Makefile ; then make distclean; fi && echo "clean done"3、sq

14、lite使用方法(1)、重要函数的介绍利用sqlite编写数据库程序,首先应利用打开数据库函数int sqlite3_open( const char *filename, sqlite3 *ppDb )将数据库文件打开,如果该数据库文件不存在,则创建一个空数据库,并返回对应数据库的句柄参数ppDb,同时如果打开数据库返回SQLITE_OK则表示成功打开数据库,否则操作失败。成功打开数据库后,便可利用执行SQL语句的函数int sqlite3_exec( sqlite3*, const char *sql, sqlite3_callback, void *,char *errmsg)对数据库进

15、行建立数据库表、数据库查询、删除和更新数据库记录等等操作,也可利用获取数据库记录内容的SQL执行函数int sqlite3_get_table(sqlite3*,const char *sql,char *resultp,int *nrow, int*ncolumn, char *errmsg )对数据库记录内容进行相应的显示操作。在对数据库操作完毕后,应利用关闭数据库函数int sqlite3_close(sqlite3 *)将先前打开的数据库关闭。有关SQLite的其它操作参考SQLite相关文档。(2)、sqlite的使用方法利用Qt编写基于ARM开发板的SQLite数据库管理程序,可以

16、先在PC机上完成仿真运行,然后再利用交叉编译工具进行编译,下面以实例具体介绍基于PC和ARM的两种不同平台的编译方法。基于PC平台的编译步骤:a、 在/usr/local/目录下新建sqlitelib_pc目录;将编译好的基于PC平台的sqlite的库文件及相关符号链接复制到sqlitelib_pc目录下或将光盘提供的sqlitelib_pc.tar.gz文件复制到/usr/local/目录下并解压;rootlocalhost local$tar xzvf sqlitelib_arm.tar.gzb、 将光盘提供的实验十六源代码database_pc.tar.gz复制到linux操作系统中的某

17、一目录下并解压,然后利用qmake生成Makefile编译文件;rootlocalhost work$tar zxvf database_pc.tar.gzrootlocalhost work$cd database_pcrootlocalhost database_pc$qmake o Makefile dbTc、 修改Makefile文件,增加sqlite共享库目录搜索路径和共享库的链接;LIBS = -L/usr/local/sqlitelib_pc -lsqlite3 d、 利用make命令编译源代码rootlocalhost database_pc$makee、 设置s

18、qlite运行参数,并在PC平台运行数据库测试程序,如图16-2所示rootlocalhost database_pc$export LD_LIBRARY_PATH=/usr/local/sqlitelib_pc:$LD_LIBRARY_PATHrootlocalhost database_pc$./dbTest图16-2 sqlite运行界面基于ARM平台的编译步骤a、 在/usr/local/目录下新建sqlitelib_arm目录;将编译好的基于ARM平台的sqlite的库文件及相关符号链接复制到sqlitelib_arm目录下或将光盘提供的sqlitelib_arm.tar.gz文件复

19、制到/usr/local/目录下并解压;b、 将光盘提供的实验十六源代码database_arm.tar.gz复制到linux操作系统中的某一目录下并解压,然后利用tmake生成Makefile编译文件(假设交叉编译环境参数已设置);root51Board$tar zxvf database_arm.tar.gzroot51Board$cd database_armrootlocalhost database_arm$tmake o Makefile dbTc、 修改Makefile文件,增加sqlite共享库和头文件目录搜索路径和共享库的链接;LIBS = -L/usr/local/sqlitelib_arm -lsqlite3 INCPATH= -I/usr/local/included、 利用make命令编译源代码rootlocalhost database_arm$makee、 ARM程序的测试运行l 将编译好的数据库程序dbTest和数据库文件test.db下载目标板的/usr/qpe/bi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论