<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > SQLite嵌入式數(shù)據(jù)庫系統(tǒng)設(shè)計

          SQLite嵌入式數(shù)據(jù)庫系統(tǒng)設(shè)計

          作者: 時間:2011-08-08 來源:網(wǎng)絡(luò) 收藏

          引 言

          本文引用地址:http://www.ex-cimer.com/article/150401.htm

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

            1 嵌入式數(shù)據(jù)庫的體系結(jié)構(gòu)

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

            2 的體系結(jié)構(gòu)及開發(fā)技術(shù)

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

            2.1 的體系結(jié)構(gòu)

           SQLite體系結(jié)構(gòu)

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

            2.2 SQLite開發(fā)技術(shù)

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

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

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

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

            在SQLite官方網(wǎng)www.sqlite.org下載SQLite-3.3.8版本,在終端解壓生成SQLite-3.3.8目錄。進入此目錄,對sqlite/src/sqliteInt.h作一定的修改,以確保btree(B樹)有正確的變量大小。不同體系結(jié)構(gòu)的Linux會有些差別。對于ARM-Linux可找到如下部分:

           

            這樣后面的“typedef INTPTR_TYPE ptr;”就定義為“int”類型,而不是“long long”。

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

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 1 2 3 下一頁

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();