關(guān) 閉

        新聞中心

        EEPW首頁 > 工控自動化 > 設(shè)計應(yīng)用 > SQLite在嵌入式系統(tǒng)Wince中的應(yīng)用

        SQLite在嵌入式系統(tǒng)Wince中的應(yīng)用

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

        隨著科學(xué)技術(shù)的發(fā)展,嵌入式系統(tǒng)成為了科技發(fā)展的主要領(lǐng)域, Linus和Wince是比較常見的嵌入式系統(tǒng)。嵌入式開發(fā)過程離不開數(shù)據(jù)庫的應(yīng)用,對于嵌入式數(shù)據(jù)庫的選擇是必要的。通常,嵌入式系統(tǒng)選擇的數(shù)據(jù)應(yīng)該盡量小,SQLite[1]在Linux中的應(yīng)用很廣泛,本設(shè)計介紹了SQLite作為一款小巧的嵌入式數(shù)據(jù)庫在Wince[2]中的應(yīng)用實例。
        1 SQLite數(shù)據(jù)庫的介紹與選擇
        1.1 SQLite數(shù)據(jù)庫結(jié)構(gòu)

        SQLite數(shù)據(jù)庫結(jié)構(gòu)圖如圖1所示。

        1.2 SQlite數(shù)據(jù)庫的特點
        SQLite是一個開源的嵌入式關(guān)系數(shù)據(jù)庫,結(jié)構(gòu)緊湊,可靠性強[3]。有以下特點:
        (1)使用非常簡單。只需要掌握3個核心API函數(shù),大多數(shù)的SQL[4]語句都可以使用。
        (2)占用很少的存儲器空間。SQLite完全獨立,數(shù)據(jù)庫引擎和應(yīng)用程序在同一系統(tǒng)進程中,因此運行速度較高。
        (3)支持ACID事務(wù),在系統(tǒng)出現(xiàn)問題或電源斷電時不會出現(xiàn)數(shù)據(jù)丟失現(xiàn)象。
        (4)支持多種語言,像C/C++/C#等。
        (5)支持多個嵌入式操作系統(tǒng)平臺,如Linux系統(tǒng)、Wince系統(tǒng)等。
        2 SQlite的選擇
        首先,SQL Server CE是Wince自身的數(shù)據(jù)庫,必須在Wince系統(tǒng)中安裝3個文件才能使用,而SQLite只需要在電腦上安裝SQlite-1.0.65.0[5],把生成的SQlite.Interop.065.DLL移植到Wince系統(tǒng)運行的程序中,并在Visual Studio2008寫程序時添加一個引用即可,操作較簡單。其次SQLite占用很少的存儲器空間(150 KB~250 KB),但是SQL Server CE卻要占用 1 MB~3 MB的空間。最重要的是SQLite具有良好的移植性,可以應(yīng)用到多個嵌入式系統(tǒng),而SQL Server CE只能在Wince中運行。
        3 SQLite的應(yīng)用硬件及軟件平臺
        本文探討中以S3C2440作為處理器ARM9的硬件平臺,以Wince6.0為應(yīng)用系統(tǒng),支持.NET2.0平臺。在Visual Studio 2008軟件平臺中用 C#中編寫程序,但是在新建項目中選擇智能設(shè)備時要選擇.NET2.0平臺。在Visual Studio 2008中用C#編寫程序時,第一次使用時要添加引用System.Data.SQLite,在程序中添加using指令集,這樣可以通過軟件編寫程序?qū)崿F(xiàn)建庫建表的功能。


        4 SQLite在Wince中的應(yīng)用實例
        4.1 Wince中顯示數(shù)據(jù)的控件DataGrid及其屬性

        DataGrid控件實際上是一個固定的列集合,每一列的行數(shù)都是不確定的,可以看作一個用來顯示數(shù)據(jù)的網(wǎng)格。它的網(wǎng)格是看不見的,只有建立了數(shù)據(jù)表,才能看到其中每一行和每一列的具體內(nèi)容,如果一個單元格的文本太長,就不能在單元格中全部顯示。但是在Wince系統(tǒng)中顯示數(shù)據(jù)的控件只有這一個,所以不能完全顯示數(shù)據(jù)這一問題正是本設(shè)計所要解決的。圖2顯示了DataGrid在Wince中的屬性。

        4.2 SQLite建數(shù)據(jù)庫的步驟
        SQLite建數(shù)據(jù)庫的步驟如下:
        (1)通過SQLiteConnection對數(shù)據(jù)庫進行連接[6],通過軟件建數(shù)據(jù)庫,首先要有數(shù)據(jù)源,如:
        SQLiteConnection conn=new SQLiteConnection("Data Source=Program Files maindata.db");
        對數(shù)據(jù)庫要進行操作需要執(zhí)行的命令,如SQLiteCommand cmd=new SQLiteCommand();
        (2)每次使用數(shù)據(jù)庫前需要打開數(shù)據(jù)庫,還需要連接數(shù)據(jù)庫,關(guān)閉數(shù)據(jù)庫;
        (3)通過 CREATE TABLE SQL語句進行建表。必須給表注上表名,方便下面操作。如:
        {cmd.CommandText="CREATETABLE ServerLert(Numintrger,BedNum varchar(20),ServerItem varchar(50),ServerTime varchar(30),Passwords varchar(30));"
        (4)可以通過INSERT INTO 語句進行插入數(shù)據(jù)。如:
        cmd.CommandText="INSERT INTO ServerLert(Num,BedNum,ServerItem,ServerTime) VALUES(1 ,′2′,′測血糖′,′10-12-10 15:50:00′)";
        (5)數(shù)據(jù)庫至此建成,由于插入的時間單元格不能完全顯示,因此需要通過對圖2中標注有灰色背景的TableStyles進行設(shè)置[7]。如:
        DataGridTableStyle dgts=new DataGridTableStyle();
        dgts.MappingName=ds.Tables[0].TableName;
        DataGridTextBoxColumn dgtbc=new DataGridTextBoxColumn();
        dgtbc.HeaderText=ds.Tables[0].Columns[0].ColumnName;
        dgtbc.MappingName=ds.Tables[0].Columns[0].ColumnName;
        dgtbc.Width=70;
        dgts.GridColumnStyles.Add(dgtbc);
        上面是對表中第一列進行的寬度設(shè)置主要是對DataGridTableStyle中列的格式進行設(shè)置,這就解決了顯示文本過長的問題。第二列設(shè)置80,第三列設(shè)置了170,在Wince中運行的結(jié)果。如圖3所示。

        4.3 Wince通過DataGrid屬性建數(shù)據(jù)庫的分析
        DataGrid在應(yīng)用于基于Wince的Windows mobile[7]智能設(shè)備時,主要針對DataGridTableStyle屬性進行設(shè)置[8]。根據(jù)應(yīng)用于Windows mobile的原理對基于Wince的ARM9的嵌入式設(shè)備中建數(shù)據(jù)庫還是行不通。對其列的屬性進行操作設(shè)置仍然改變不了列的寬度,所以這種路徑行不通。試了很多種方法,最后通過軟件編程進行設(shè)置,得到了圖3的結(jié)果。比較DataGridTableStyl進行設(shè)置與軟件設(shè)置發(fā)現(xiàn),問題在于表的MappingName與列的MappingName設(shè)置時,必須對應(yīng)才能實現(xiàn)修改功能。用DataGridTableStyle設(shè)置,如果列的MappingName與數(shù)據(jù)庫中的建表的列不對應(yīng),則映射不存在,從而找不到網(wǎng)格去顯示數(shù)據(jù),更無法對數(shù)據(jù)的列寬進行操作。所以通過軟件編程,可以對建在緩存區(qū)域中的每一張表中所有的列進行操作,解決文本過長不能完全顯示的問題。
        通過上面的介紹可以看出,SQLite作為開源的嵌入式數(shù)據(jù)庫應(yīng)用在Wince中的一個優(yōu)點就是建表比較簡單,不像SQL CE數(shù)據(jù)庫[9],在Wince運行中需要先創(chuàng)建表,把所建的數(shù)據(jù)庫放在Wince的系統(tǒng)中,添加數(shù)據(jù)源時再去綁定這個數(shù)據(jù)源。對于在.net2.0平臺建立的數(shù)據(jù)庫[10],添加數(shù)據(jù)源時無法找到路徑,所以這種方法不可行。通過SQLite軟件創(chuàng)建數(shù)據(jù)庫的方法則可以改善上述不足。SQLite作為一款小巧的嵌入式數(shù)據(jù)庫,發(fā)展前景很大,在基于ARM的Wince操作系統(tǒng)有著廣泛應(yīng)用[11]。
        參考文獻
        [1] OWENS M.The definitive guide to SQLite[M].US:APress,2006.
        [2] 周毓林,寧陽,陸貴強,等.Windows CE.net內(nèi)核定制及應(yīng)用開發(fā)[M].北京:電子工業(yè)出版社,2005.
        [3] 萬瑪寧,關(guān)永,韓相軍.嵌入式數(shù)據(jù)庫典型技術(shù)SQLite和Berkeley DB的研究[J].微計算機信息,2006,22(2):91-92.
        [4] HENDERSON K.Transact-SQL權(quán)威指南[M].健蓮科技譯,北京:中國電力出版社,2002.
        [5] An introduction to the SQLite C/C++interface[CP].http:// www.sqlite.org/cintro.html.
        [6] 胡偉.SQLite在嵌入式系統(tǒng)上的實現(xiàn)研究[J].計算機與數(shù)字工程,2009,37(2):46-47.
        [7] MierosoftWindowsMobile.http://www.mierosoft.eoInjwindowsmobile/default.msPx.
        [8] 劉彥博,胡硯,馬駭.WindowsMobile平臺應(yīng)用與開發(fā)[M]. 北京:人民郵電出版社,2006.
        [9] NEWMAN C.SQLite[M],USA:Sams,2004.
        [10] ROB P.數(shù)據(jù)庫設(shè)計與開發(fā)教程[M].于書舉,許向眾,韓德強,等譯,北京:電子工業(yè)出版社,2002.
        [11] 鄧成中,黃惟公,萬松峰.基于嵌入式ARMWinCE的小型監(jiān)控系統(tǒng)的設(shè)計[J].微計算機信息,2005,21(23):47-49.

        c++相關(guān)文章:c++教程




        評論


        相關(guān)推薦

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

        關(guān)閉
        主站蜘蛛池模板: 额济纳旗| 中阳县| 元阳县| 斗六市| 怀宁县| 南皮县| 虞城县| 五大连池市| 山东| 县级市| 南乐县| 杂多县| 库车县| 陈巴尔虎旗| 济源市| 汉沽区| 花莲县| 朔州市| 顺义区| 调兵山市| 商城县| 石门县| 蒙城县| 砀山县| 阿克| 张掖市| 云安县| 靖江市| 吴江市| 贵州省| 凤城市| 克什克腾旗| 旅游| 乐业县| 塘沽区| 鲁山县| 思南县| 甘孜| 车险| 阳谷县| 石门县|