|
志盟嵌入式培訓(xùn)一年_濰坊嵌入式培訓(xùn)機(jī)構(gòu)_SQLite在嵌入式Wince中的應(yīng)用,
隨著科學(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ù)庫的特點嵌入式有必要學(xué)匯編, 武漢嵌入式培訓(xùn)價格, 嵌入式軟件考研科目, 享的美嵌入式音響, 深圳嵌入式硬件, 嵌入式rj45驅(qū)動, 遼大嵌入式教授, 嵌入式處理器功能, 激光投影機(jī)嵌入式, 中國移動嵌入式風(fēng)險, 嵌入式開發(fā)事例, 嵌入式get, 嵌入式g代碼編譯, 嵌入式網(wǎng)絡(luò)的發(fā)展, 嵌入式學(xué)習(xí)重點, 正點原子嵌入式系統(tǒng), 高級嵌入式軟件架構(gòu), 嵌入式系統(tǒng)軟件屬于, 銀行嵌入式窗口, 四年嵌入式工程師, 嵌入式程序運(yùn)行時間, 網(wǎng)頁設(shè)計嵌入式, PS4嵌入式游戲, 微電子嵌入式工程師, 大連嵌入式公司排名, 嵌入式指令mls, 嵌入式系統(tǒng)設(shè)計方法, 可定制嵌入式處理器, 嵌入式驅(qū)動加載步驟, 單片機(jī)嵌入式自學(xué), 嵌入式平滑輪, 嵌入式web開發(fā), 音頻嵌入式系統(tǒng), 嵌入式編輯器有哪些, 通信專業(yè)畢設(shè)嵌入式, 嵌入式函數(shù)和, 牙齒嵌入式好不好, 嵌入式背景怎么設(shè)置, 嵌入式程序代碼手冊, 嵌入式好找工作嗎, 嵌入式待遇高的公司, 無錫嵌入式工資, 嵌入式軟件的穩(wěn)定性,
SQLite是一個開源的嵌入式關(guān)系數(shù)據(jù)庫,結(jié)構(gòu)緊湊,可靠性強(qiáng)[3]。有以下特點:
(1)使用非常簡單。只需要掌握3個核心API函數(shù),大多數(shù)的SQL[4]語句都可以使用。
(2)占用很少的存儲器空間。SQLite完全獨立,數(shù)據(jù)庫引擎和應(yīng)用程序在同一系統(tǒng)進(jìn)程中,因此運(yùn)行速度較高。
(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)運(yùn)行的程序中,并在Visual Studio2008寫程序時添加一個引用即可,操作較簡單。其次SQLite占用很少的存儲器空間(150 KB~250 KB),但是SQL Server CE卻要占用 1 MB~3 MB的空間。最重要的是SQLite具有良好的移植性,可以應(yīng)用到多個嵌入式系統(tǒng),而SQL Server CE只能在Wince中運(yùn)行。
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ù)庫進(jìn)行連接[6],通過軟件建數(shù)據(jù)庫,首先要有數(shù)據(jù)源,如:
SQLiteConnection conn=new SQLiteConnection(“Data Source=\Program Files\ maindata.db“);
對數(shù)據(jù)庫要進(jìn)行操作需要執(zhí)行的命令,如SQLiteCommand cmd=new SQLiteCommand();
(2)每次使用數(shù)據(jù)庫前需要打開數(shù)據(jù)庫,還需要連接數(shù)據(jù)庫,關(guān)閉數(shù)據(jù)庫;
(3)通過 CREATE TABLE SQL語句進(jìn)行建表。必須給表注上表名,方便下面操作。如:
{cmd.CommandText=“CREATETABLE ServerLert(Numintrger,BedNum varchar(20),ServerItem varchar(50),ServerTime varchar(30),Passwords varchar(30));“
(4)可以通過INSERT INTO語句進(jìn)行插入數(shù)據(jù)。如:
cmd.CommandText=“INSERT INTO ServerLert(Num,BedNum,ServerItem,ServerTime) VALUES(1 ,′2′,′測血糖′,′10-12-10 15:50:00′)“;
(5)數(shù)據(jù)庫至此建成,由于插入的時間單元格不能完全顯示,因此需要通過對圖2中標(biāo)注有灰色背景的TableStyles進(jìn)行設(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);
上面是對表中第一列進(jìn)行的寬度設(shè)置主要是對DataGridTableStyle中列的格式進(jìn)行設(shè)置,這就解決了顯示文本過長的問題。第二列設(shè)置80,第三列設(shè)置了170,在Wince中運(yùn)行的結(jié)果。如圖3所示。
4.3 Wince通過DataGrid屬性建數(shù)據(jù)庫的分析
DataGrid在應(yīng)用于基于Wince的Windows mobile[7]智能設(shè)備時,主要針對DataGridTableStyle屬性進(jìn)行設(shè)置[8]。根據(jù)應(yīng)用于Windows mobile的原理對基于Wince的ARM9的嵌入式設(shè)備中建數(shù)據(jù)庫還是行不通。對其列的屬性進(jìn)行操作設(shè)置仍然改變不了列的寬度,所以這種路徑行不通。試了很多種方法,最后通過軟件編程進(jìn)行設(shè)置,得到了圖3的結(jié)果。比較DataGridTableStyl進(jìn)行設(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ù)的列寬進(jìn)行操作。所以通過軟件編程,可以對建在緩存區(qū)域中的每一張表中所有的列進(jìn)行操作,解決文本過長不能完全顯示的問題。
通過上面的介紹可以看出,SQLite作為開源的嵌入式數(shù)據(jù)庫應(yīng)用在Wince中的一個優(yōu)點就是建表比較簡單,不像SQL CE數(shù)據(jù)庫[9],在Wince運(yùn)行中需要先創(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]。 |
|