實驗十六 嵌入式數(shù)據(jù)庫實驗_第1頁
實驗十六 嵌入式數(shù)據(jù)庫實驗_第2頁
實驗十六 嵌入式數(shù)據(jù)庫實驗_第3頁
實驗十六 嵌入式數(shù)據(jù)庫實驗_第4頁
實驗十六 嵌入式數(shù)據(jù)庫實驗_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實驗十六 嵌入式數(shù)據(jù)庫移植實驗【實驗?zāi)康摹?、了解嵌入式數(shù)據(jù)在嵌入式設(shè)備中應(yīng)用2、了解SQLite的移植和編譯過程3、掌握嵌入式數(shù)據(jù)庫的編程方法【實驗原理】1、SQLite介紹SQLite 是 D. Richard Hipp 用 C 語言編寫的開源嵌入式數(shù)據(jù)庫引擎。它是完全獨立的,不具有外部依賴性。占用資源非常低,在嵌入式設(shè)備中,只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux等主流操作系統(tǒng),可與TCL、PHP、Java等程序語言相結(jié)合,提供ODBC接口,其處理速度甚至令開源世界著名的數(shù)據(jù)庫管理系統(tǒng)Mysql、PostgreSQL望塵莫及。SQLite 對SQL92 標(biāo)準(zhǔn)的支持包

2、括索引、限制、觸發(fā)和查看,支持原子的、一致的、獨立和持久(ACID)的事務(wù)。在內(nèi)部,SQLite 由SQL 編譯器、內(nèi)核、后端以及附件幾個組件組成,如圖16-1所示。SQLite 通過利用虛擬機(jī)和虛擬數(shù)據(jù)庫引擎(VDBE),使調(diào)試、修改和擴(kuò)展 SQLite 的內(nèi)核變得更加方便。所有SQL語句都被編譯成易讀的、可以在SQLite 虛擬機(jī)中執(zhí)行的程序集。圖 16-1 SQLite的內(nèi)部結(jié)構(gòu)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命令對系統(tǒng)進(jìn)行編譯配置,configure配置文件在檢查編譯器時會錯,所以應(yīng)將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; ; 修改完畢后,在源代碼目錄下執(zhí)行編譯配置命令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文件修改后,在源代碼目錄中執(zhí)行make編譯命令,編譯后的庫文件和可執(zhí)行文件保存在當(dāng)前目錄下的隱藏文件夾.libs中,然后執(zhí)行make install安裝命令,共享庫文件libsqlite3.so.0.8.6及相關(guān)的符號鏈接文件復(fù)制在/usr/local/lib目錄下,頭文件sqlite3.h復(fù)制在/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的具體內(nèi)容(見光盤中實驗十六源代碼目錄下sqlite-3.3.5-arm.tar.gz中的內(nèi)容)和使用方法。  編譯腳本的使用方法編譯腳本是一個可執(zhí)行的文件,在源代碼所在的目錄下利用文本編輯器新建編譯腳本文件Makefile.sh(內(nèi)容如下),然后利用chmod命令將其屬性改成可執(zhí)行文件并運(yùn)行腳本即可

9、完成上述編譯的全過程。rootlocalhost sqlite-3.3.5 chmod 755 Makfile.shrootlocalhost sqlite-3.3.5 ./Makfile.shMakefile.sh的內(nèi)容:#!/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的使用方法本系統(tǒng)編寫的編譯文件Makefile.mk是一個類似于Makefile的編譯文件。在源代碼所在的目錄下利用文本編輯器新建編譯文件Makefile.mk(內(nèi)容如下),然后利用make all f Makefile.mk即可完成上述編譯的全過程,也可根據(jù)Makefile的偽目標(biāo)編譯方法逐項進(jìn)行編譯。(具體參考Makfile實驗)rootlocalhost sqlite-3.3.5 make all f Makfile.mkMakefile.mk

12、的內(nèi)容:#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)、重要函數(shù)的介紹利用sqlite編寫數(shù)據(jù)庫程序,首先應(yīng)利用打開數(shù)據(jù)庫函數(shù)int sqlite3_open( const char *filename, sqlite3 *ppDb )將數(shù)據(jù)庫文件打開,如果該數(shù)據(jù)庫文件不存在,則創(chuàng)建一個空數(shù)據(jù)庫,并返回對應(yīng)數(shù)據(jù)庫的句柄參數(shù)ppDb,同時如果打開數(shù)據(jù)庫返回SQLITE_OK則表示成功打開數(shù)據(jù)庫,否則操作失敗。成功打開數(shù)據(jù)庫后,便可利用執(zhí)行SQL語句的函數(shù)int sqlite3_exec( sqlite3*, const char *sql, sqlite3_callback, void *,char *errmsg)對數(shù)據(jù)庫進(jìn)

15、行建立數(shù)據(jù)庫表、數(shù)據(jù)庫查詢、刪除和更新數(shù)據(jù)庫記錄等等操作,也可利用獲取數(shù)據(jù)庫記錄內(nèi)容的SQL執(zhí)行函數(shù)int sqlite3_get_table(sqlite3*,const char *sql,char *resultp,int *nrow, int*ncolumn, char *errmsg )對數(shù)據(jù)庫記錄內(nèi)容進(jìn)行相應(yīng)的顯示操作。在對數(shù)據(jù)庫操作完畢后,應(yīng)利用關(guān)閉數(shù)據(jù)庫函數(shù)int sqlite3_close(sqlite3 *)將先前打開的數(shù)據(jù)庫關(guān)閉。有關(guān)SQLite的其它操作參考SQLite相關(guān)文檔。(2)、sqlite的使用方法利用Qt編寫基于ARM開發(fā)板的SQLite數(shù)據(jù)庫管理程序,可以

16、先在PC機(jī)上完成仿真運(yùn)行,然后再利用交叉編譯工具進(jìn)行編譯,下面以實例具體介紹基于PC和ARM的兩種不同平臺的編譯方法?;赑C平臺的編譯步驟:a、 在/usr/local/目錄下新建sqlitelib_pc目錄;將編譯好的基于PC平臺的sqlite的庫文件及相關(guān)符號鏈接復(fù)制到sqlitelib_pc目錄下或?qū)⒐獗P提供的sqlitelib_pc.tar.gz文件復(fù)制到/usr/local/目錄下并解壓;rootlocalhost local$tar xzvf sqlitelib_arm.tar.gzb、 將光盤提供的實驗十六源代碼database_pc.tar.gz復(fù)制到linux操作系統(tǒng)中的某

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、 設(shè)置s

18、qlite運(yùn)行參數(shù),并在PC平臺運(yùn)行數(shù)據(jù)庫測試程序,如圖16-2所示rootlocalhost database_pc$export LD_LIBRARY_PATH=/usr/local/sqlitelib_pc:$LD_LIBRARY_PATHrootlocalhost database_pc$./dbTest圖16-2 sqlite運(yùn)行界面基于ARM平臺的編譯步驟a、 在/usr/local/目錄下新建sqlitelib_arm目錄;將編譯好的基于ARM平臺的sqlite的庫文件及相關(guān)符號鏈接復(fù)制到sqlitelib_arm目錄下或?qū)⒐獗P提供的sqlitelib_arm.tar.gz文件復(fù)

19、制到/usr/local/目錄下并解壓;b、 將光盤提供的實驗十六源代碼database_arm.tar.gz復(fù)制到linux操作系統(tǒng)中的某一目錄下并解壓,然后利用tmake生成Makefile編譯文件(假設(shè)交叉編譯環(huán)境參數(shù)已設(shè)置);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程序的測試運(yùn)行l(wèi) 將編譯好的數(shù)據(jù)庫程序dbTest和數(shù)據(jù)庫文件test.db下載目標(biāo)板的/usr/qpe/bi

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論