當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導讀]SQLite嵌入式數據庫系統(tǒng)設計

引 言

  隨著嵌入式系統(tǒng)的廣泛應用及用戶對數據處理和管理需求的不斷提高,各種智能設備與數據庫技術的緊密結合得到重視。這種數據庫不僅具有傳統(tǒng)數據庫的主要功能,還具有嵌入式和支持移動技術兩種特性??梢哉f,嵌入式數據庫的發(fā)展提高了數據信息接入的普遍性,使人們隨時隨地獲取信息的愿望成為可能。
 

  1 嵌入式數據庫系統(tǒng)的體系結構

  嵌入式數據庫將數據庫系統(tǒng)與操作系統(tǒng)和具體應用集成在一起,運行在各種智能嵌入式設備上。與傳統(tǒng)的數據庫系統(tǒng)相比,它一般體積較小,有較強的便攜性和易用性,以及較為完備的功能來實現用戶對數據的管理操作。但是,由于嵌入式系統(tǒng)的資源限制,它無法作為一個完整的數據庫來提供大容量的數據管理,而且嵌入式設備可隨處放置,受環(huán)境影響較大,數據可靠性較低。在實際應用中,為了彌補嵌入式數據庫存儲容量小、可靠性低的不足,通常在PC機上配置后臺數據庫來實現大容量數據的存儲和管理。嵌入式數據庫作為前端設備,需要一個GUI交互界面來實現嵌入式終端上的人機交互,并通過串口實現和PC機上主數據源之間的數據交換,實現系統(tǒng)服務器端數據的管理,接收嵌入式終端上傳的數據和下載數據到嵌入式終端機等操作。

  2 SQLite的體系結構及開發(fā)技術

  SQLite是D·理查德·希普開發(fā)的用一個小型C庫實現的一種強有力的嵌入式關系數據庫管理體制。它提供對SQL92的大多數支持:多表、索引、事務、視圖、觸發(fā)和一系列的用戶接口及驅動。

  2.1 SQLite的體系結構

  SQLite可以分成8個主要子系統(tǒng),如圖1所示。頂層是標記處理器(tokenizer)和分析器(parser)。高度優(yōu)化的分析生成器可以快速生成高效率的代碼。底部是基于Knuth經過優(yōu)化的B樹。這樣可以運行在可調整的頁面緩沖(pagecache)上,有助于將對磁盤的查找減到最少。再往下是頁面高速緩存。它作用在OS的抽象層之上,這樣的安排有助于數據庫的移動。體系結構的核心是虛擬數據庫引擎(VDBE)。VDBE完成與數據操作相關的全部操作并且是客戶和儲存之間進行信息交換的中間單元。它是SQLite的核心。在SQL語句被分析之后,VDBE開始起作用。代碼生成器將分析樹翻譯成一個袖珍程序,隨后這些袖珍程序被組合成用VDBE虛擬機器語言表示的一系列指令。如此往復,VDBE執(zhí)行每條指令,最終完成SQL語句指定的查詢要求。VDBE的機器語言由圍繞數據庫管理的128個操作碼(op—code)組成。對于打開表、查詢索引、存儲和刪除記錄以及很多其他數據庫操作都有對應的操作碼。VDBE里的每條指令由1個操作碼和3個操作數(operand)組成。一些指令使用全部3個操作數,也有些指令一個也未使用。這完全取決于指令的性質。例如Open指令用于打開一個表的指針,使用了全部3個操作數:第1個操作數(P1)包含指針的ID號,第2個操作數(P2)指出表的根位置(或者表的首頁位置),第3個操作數是表的名字。

  2.2 SQLite開發(fā)技術

  SQLite的API易于使用,只需要3個用來執(zhí)行SQL和獲得數據的函數。它還是可擴展的,允許程序員自定義函數,然后通過callback()函數集合進去。開放源碼團體已經擴展了眾多的客戶接口、適配器、驅動等,這就使得其他語言使用SQLite也成為可能。

  使用C語言API只需要三步。首先,提供文件名和訪問模式,來調用sqlite_open()連接數據庫。然后,執(zhí)行callback()函數,SQLite通過對每個記錄執(zhí)行callback()函數獲得從數據庫那里得到的結果。最后,如果想執(zhí)行一個SQL查詢并獲得一個callback()函數的指針,可以調用sqlite_exec()。另外還可以調用sqlite3_get_table()函數獲得數據表單的內容。

  SQLite還提供了存取二進制大對象(BLOB)的方法,同時在線程安全、數據庫管理、API的擴展等方面也都提供了強大方便的技術支持。

  3 SQLite在ARM9開發(fā)板上的編譯及拷貝

  在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文件的內容,注釋掉相關代碼,讓系統(tǒng)不去檢查交叉編譯環(huán)境,否則會出現錯誤,不能生成Makefile文件。然后新建一個文件夾sqlite-arm-linux來保存將要生成的庫文件,運行以下命令進行配置:

[!--empirenews.page--]

  將在本目錄下生成Makefile文件。修改Makefile文件中如下語句,指定主機編譯器為GCC:

  這時就可以運行make & & make install命令開始編譯,若無其他錯誤提示,則會在/../sqlite-3.3.8/sqlite-arm-linux/lib目錄下生成庫文件。主要有l(wèi)ibsqlite3.so、libsqlite3.so.O、libsqlite3.so.O.8.6三個文件。同時在bin文件夾下生成了可執(zhí)行文件sqlite3。為了減小執(zhí)行文件大小,用strip命令處理去掉其中的調試信息。

庫文件生成后,可以通過NFS(網絡文件系統(tǒng))把相關庫文件拷貝到ARM開發(fā)板上,設置好主機NFS服務器,啟動目標板后,執(zhí)行:

  其中192.168.1.101為NFS服務器IP,這樣就把SQLite庫文件所在文件夾掛載到了目標板上,拷貝時注意加上-aRF選項,因為libsqlite3.so和libsqlite3.so.O是鏈接到Iibsqlite3.so.O.8.6的。4 嵌入式數據庫系統(tǒng)設計及實現

 

  對嵌入式系統(tǒng)而言,強大的圖形用戶接口使系統(tǒng)的功能更加豐富。目前有眾多的GUI可供使用,考慮到授權和價格的因素,我們在Qt/Embedded基礎上進行數據庫界面程序的開發(fā),完成嵌入式數據庫系統(tǒng)的設計。Qt良好的封裝機制使Qt的模塊化程度非常高,可重用性較好。嵌入式數據庫系統(tǒng)的基本結構如圖2所示。

  通過Qt的QTable控件來實現數據表單的顯示,通過QListView、QC20mBobox以及QTextEdit等控件進行數據表單的選擇、數據輸入等,配合PushButton控件實現數據表的創(chuàng)建、刪除和數據查詢、添加、刪除、修改等操作。這樣,實現數據庫系統(tǒng)的基本管理,并可利用串口實現與后臺數據庫之間的數據交互。本系統(tǒng)利用Qt Designer實現數據庫界面的快速開發(fā),并通過調用SQLite的API接口函數實現數據庫的基本操作。下面簡要介紹一下用QtDesigner開發(fā)數據庫界面的基本方法及關鍵代碼。新建一個C++項目,在此基礎上新建一個窗口部件,在窗口部件上添加一個Table控件作為數據表單的顯示界面。另根據需要,添加PushButton控件以實現相應的操作。在窗口類下新建一個槽,命名為SelectSlot()。連接相關按鈕信號,關鍵代碼如下:

  其中tableView函數的作用是將查詢得到的數據表顯示在Table控件中。函數體程序如下:

[!--empirenews.page--]

  終端下進入工程目錄,修改*.pro文件,并添加如下內容:

  這里加入了編譯程序所需庫文件的路徑以及sqlite.h頭文件的路徑。這一切做好后,開始編譯。

  tmake-o Makefile EDBMS.pro生成Makefile,將其中的編譯工具改為arm-linux-g++,加上交叉編譯的相關庫文件。然后make編譯,生成能在ARM開發(fā)板上運行的二進制文件,并且通過NFS掛載到開發(fā)板上。運行./EDBMS,會出現我們設計的窗口界面。查詢一個數據表的內容并顯示在QTable控件上,主界面效果如圖3所示。

  另外,系統(tǒng)運用SQL Servqr。2000作為后臺數據庫,用VB 6.O開發(fā),通過ODBC與數據庫連接,實現后臺數據庫管理,并負責接收和處理客戶端請求。PC機與嵌入設備端則可以通過串口進行通信,以完善系統(tǒng)功能。這樣,一個較為完備的嵌入式數據庫系統(tǒng)就構建起來了。

  結 語

  本文結合嵌入式數據庫的特點,運用SQLite在ARM-Linux平臺上構建嵌入式數據庫系統(tǒng)。在此基礎上利用Qt設計了數據庫界面,使用SQLite的API實現數據庫的基本操作。最后對后臺數據庫的配置及串口通信機制做了簡要介紹,完成了整個嵌入式數據庫系統(tǒng)的構建。

本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或將催生出更大的獨角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數字化轉型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據媒體報道,騰訊和網易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數據產業(yè)博覽會開幕式在貴陽舉行,華為董事、質量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數據產業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數字世界的話語權最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經營業(yè)績穩(wěn)中有升 落實提質增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數字經濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉