《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > SQLite嵌入式數據庫系統設計
SQLite嵌入式數據庫系統設計
摘要: SQLite嵌入式數據庫系統設計,引言隨著嵌入式系統的廣泛應用及用戶對數據處理和管理需求的不斷提高,各種智能設備與數據庫技術的緊密結合得到重視。這種數據庫不僅具有傳統數據庫的主要功能,還具有嵌入式和支持移動技術兩種特性。可以說,嵌
Abstract:
Key words :

引 言

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

  1 嵌入式數據庫系統的體系結構

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

  2 SQLite的體系結構及開發技術

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

  2.1 SQLite的體系結構

 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實現數據庫的基本操作。最后對后臺數據庫的配置及串口通信機制做了簡要介紹,完成了整個嵌入式數據庫系統的構建。

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
久久这里只有| 国产网站欧美日韩免费精品在线观看 | 午夜欧美理论片| 在线亚洲一区| 夜夜精品视频| 99视频热这里只有精品免费| 亚洲精品欧美| 日韩特黄影片| 999在线观看精品免费不卡网站| 亚洲国产视频一区二区| 亚洲国产成人高清精品| 伊人影院久久| 有码中文亚洲精品| 亚洲二区在线观看| 亚洲激情在线视频| 亚洲人成在线影院| aa亚洲婷婷| 亚洲亚洲精品三区日韩精品在线视频| 亚洲视频999| 亚洲一卡二卡三卡四卡五卡| 亚洲综合首页| 欧美在线免费视频| 久久精品一区二区| 亚洲精品国产精品国产自| 亚洲精品四区| 亚洲午夜久久久久久久久电影院| 在线亚洲一区观看| 亚洲欧美中日韩| 久久av一区二区三区漫画| 欧美一区二区福利在线| 久久久高清一区二区三区| 麻豆精品在线播放| 欧美剧在线观看| 国产精品久久久久国产a级| 国产伦精品一区二区三区视频孕妇| 国产欧美精品一区aⅴ影院| 国产亚洲欧洲997久久综合| 在线免费日韩片| 日韩一级精品视频在线观看| 亚洲主播在线| 亚洲国产91| 99精品视频免费观看| 亚洲一区二区在线免费观看| 久久超碰97人人做人人爱| 久久综合999| 欧美日韩高清区| 国产日产欧美a一级在线| 在线播放视频一区| 一区二区三区免费观看| 欧美一区二区三区在线看| 亚洲日本免费电影| 亚洲专区一区| 久久综合网hezyo| 欧美日韩伊人| 国产亚洲一区二区精品| 亚洲欧洲一区二区天堂久久| 亚洲欧美日韩国产精品| 亚洲高清在线| 亚洲欧美日韩精品在线| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美三区美女| 海角社区69精品视频| 亚洲精选91| 午夜欧美大尺度福利影院在线看| 亚洲精品在线看| 欧美一级视频免费在线观看| 欧美成人激情在线| 国产精品一区二区黑丝| 亚洲高清资源| 亚洲欧美日韩在线观看a三区| 亚洲欧洲一区| 久久精品国产第一区二区三区最新章节| 欧美国产精品久久| 国产一区成人| 一区二区三区欧美亚洲| 亚洲欧洲精品一区| 久久av一区二区三区亚洲| 欧美日韩国产精品| 红桃视频一区| 亚洲免费影院| 亚洲视频精选在线| 欧美a级一区| 国产亚洲成av人在线观看导航| 亚洲靠逼com| 亚洲国产岛国毛片在线| 欧美亚洲在线播放| 国产精品v欧美精品v日韩| 欧美连裤袜在线视频| 亚洲激情电影中文字幕| 亚洲国产精品va在线看黑人| 欧美紧缚bdsm在线视频| 国产精品裸体一区二区三区| 亚洲激情女人| 亚洲国产国产亚洲一二三| 香蕉久久夜色精品| 久久亚洲欧美国产精品乐播| 99国产成+人+综合+亚洲欧美| 久久国产日韩| 欧美午夜视频一区二区| 亚洲激情一区| 亚洲国产精品第一区二区三区| 午夜亚洲伦理| 欧美视频一区二区| 亚洲精品久久久久久下一站| 亚洲黑丝一区二区| 久久久久久久尹人综合网亚洲| 国产精品久久久久一区二区三区共| 日韩性生活视频| 亚洲欧美另类国产| 久久久久久久久久码影片| 国产精品二区在线观看| 日韩天堂av| 日韩一级欧洲| 欧美电影电视剧在线观看| 伊人狠狠色丁香综合尤物| 久久精品亚洲一区二区三区浴池| 久久精品日韩欧美| 国产偷自视频区视频一区二区| 亚洲欧美中文另类| 性视频1819p久久| 国产精品亚洲一区| 午夜精品999| 久久精品国产第一区二区三区最新章节| 国产欧美二区| 久久精品72免费观看| 可以免费看不卡的av网站| 狠狠色丁香婷婷综合| 亚洲高清不卡| 女人色偷偷aa久久天堂| 亚洲国产日本| 99视频在线精品国自产拍免费观看| 欧美美女日韩| 国产亚洲欧美日韩日本| 尤物在线精品| 久久超碰97人人做人人爱| 久久精彩视频| 国模吧视频一区| 亚洲国产91精品在线观看| 媚黑女一区二区| 亚洲国产精品久久久久秋霞不卡| 亚洲精品日韩一| 欧美另类综合| 中文在线一区| 欧美一区亚洲二区| 国内精品免费在线观看| 亚洲日本va午夜在线电影| 欧美日韩mv| 亚洲天堂av图片| 久久久不卡网国产精品一区| 在线播放日韩专区| 一区二区欧美视频| 国产精品欧美一区二区三区奶水 | 亚洲一区二区三区精品视频| 欧美中日韩免费视频| 狠狠狠色丁香婷婷综合激情| 亚洲久久视频| 国产精品久久久久久久久果冻传媒| 性色一区二区| 欧美成人精品h版在线观看| 亚洲精品欧美激情| 性欧美18~19sex高清播放| 狠狠久久亚洲欧美专区| aa级大片欧美| 国产裸体写真av一区二区| 亚洲国产精品女人久久久| 欧美日韩a区| 欧美一区二区在线观看| 欧美国产日韩一区| 亚洲一区二区三区涩| 久久噜噜噜精品国产亚洲综合| 最新精品在线| 欧美一区二区视频在线观看| 136国产福利精品导航| 亚洲综合视频一区| 激情国产一区| 亚洲午夜一二三区视频| 一区在线影院| 欧美一区二区啪啪| 亚洲茄子视频| 久久久久久综合网天天| 日韩亚洲一区二区| 久久视频一区| 在线视频中文亚洲| 久久综合中文| 亚洲无吗在线| 香蕉成人啪国产精品视频综合网| 久久av一区二区三区漫画| 欧美精品激情blacked18| 亚洲欧美日韩国产成人精品影院| 欧美成人黑人xx视频免费观看| 亚洲男人的天堂在线| 欧美精品在线播放| 久久精品国产亚洲一区二区| 欧美午夜寂寞影院| 亚洲人成绝费网站色www| 国产日韩欧美在线| 中文一区二区在线观看| 激情成人在线视频| 先锋影院在线亚洲| 亚洲最新视频在线|