嵌入式資料庫sqlce的開發與應用
在當前的嵌入式工控產品中,資料庫得到了越來越多的應用。通過資料庫,可以非常方便地儲存和檢索資料,極大地提高工作效率。英創公司基於wince的arm9工控主機板,提供了兩種型別的資料庫,供客戶的應用程式選擇。一種是wince自帶的資料庫,主要面對需要儲存的資料量較小,資料結構相對簡單的應用,例如系統的動態配置檔案,則使用起來非常合適。另一種則是在pc中最流行的sql資料庫,英創arm9工控主機板預設配置的sql資料庫版本為sql ce2.0。在表一中,列出了wince自帶資料庫與sql ce資料庫部分功能的對比,使用者可以根據自己的需要,選擇合適的資料庫。關於wince自帶資料庫的操作請參考《evc高階程式設計及其應用開發》wince基礎資料庫程式設計部分。本文主要講解在evc開發環境下,以使用adoce 3.1為例詳細說明開發sqlce本地資料庫的方法。
表一:wince自帶資料庫與sqlce資料庫功能對照表
wince
自帶資料庫
sqlce
資料庫
開發方式 使用
api函式操作 使用
sql語句操作
資料型別 較少
(9種)
較多(20種)
與pc端
sql sever
資料同步
不支援 支援
更改表字段
不支援 支援
在evc環境下由於沒有提供專門的api函式對sqlce進行操作,需要通過adoce(active data object for windows ce)元件才能實現對sqlce資料庫的操作。為了方便使用者使用sqlce資料庫,利用adoce元件技術(adoce介紹在附錄一中),針對資料庫操作中常用的功能,包括創開啟資料庫、建資料表等,英創提供了乙個對sqlce資料庫操作的管理類dbmanager,應用程式通過呼叫該類中提供的api函式,就可以很方便的建立與sqlce的鏈結、開啟資料庫,並可以直接利用sql語句來對資料庫進行建立表、為表新增記錄以及查詢表中的記錄等功能。在evc環境下通過dbmanager類訪問sqlce資料庫模型如圖1所示。
圖1 evc通過dbmanager訪問資料庫模型
一、dbmanager類及派生類說明
dbmanager類主要提供開啟資料庫、執行sql語句等方法。其標頭檔案宣告如下:
//函式功能:開啟資料庫
//入口引數:lpszfilename表示要開啟的資料庫名稱,為絕對路徑加檔名。
//出口引數:無
//返 回 值:true:開啟資料庫成功;false:開啟資料庫失敗
bool opendatabase(lpctstr lpszdbname);
//函式功能:執行sql語句
//入口引數:lpstrsql為要執行sql語句的字串。
//出口引數:無
//返 回 值:true:執行sql語句成功;false:執行sql語句失敗
bool execsql(lpctstr lpstrsql);
如果想靈活使用dbmanager類對資料庫操作,必須了解sql語句,常用sql語句可以參考附錄二中的內容。但是,對於嵌入式工程師來說,有很多使用者對sql語句並不了解,這樣,對使用者使用資料庫提高了門檻。在實際應用中,嵌入式主機板的主要任務是把採集工業現場的狀態並儲存到資料庫中,如果想檢視分析資料,可以通過webserver把資料庫資訊傳輸到client端。為了方便不了解sql語句的使用者使用資料庫,我們在基類dbmanager中提供了幾個虛函式,並給出在派生類中實現虛函式的例子。這樣,使用api函式就可以實現開啟資料庫、建立表、插入記錄等操作。使用者可以根據要儲存資料結構修改虛函式就可以滿足使用者運算元據庫的要求,下面以乙個實際示例說明使用派來類的方法。
在工業現場,使用者常常需要把現場的狀態儲存起來,例如,把ad採集的資料和開關量儲存起來。本文中,以英創的eta197 ad模組和eta716 io模組為例,說明資料庫的操作。eta197、eta716與嵌入式主機板的連線如圖2所示。
圖2 嵌入式主機板與eta197、eta716連線示意圖
根據實際情況,我們需要儲存的資訊有時間、io輸出值、io輸入值、8通道ad取樣值,根據我們的需要,我們設計addiodata資料結構如下。
struct addiodata
;根據此資料結構,我們實現了建立表和插入記錄的api函式,函式宣告如下:
class addatabase : public dbmanager
;二、使用dbmanager類及派生類實現建立表、插入記錄等操作的順序為:
(1)開啟資料庫
(2)建立表
(3)插入記錄
addatabase dbm;
cstring dbfile=_t('//nandflash//emtronix.sdf');
cstring tablename=_t('adcollection');
userinfo test;
dbm.opendatabase(dbfile); //開啟資料庫,引數為資料庫路徑名
dbm.createtable(tablename); //建立表
for(i=0;i<6;i++) //每秒鐘採集一次資料
dbm.insertrecord(tablename,test); //向tablename表中插入記錄
sleep(1000);
}由上例可以看出,使用英創公司提供的dbmanager的派生類,不必了解資料庫就可以方便地實現資料的儲存。
這種運算元據庫的方式不是十分靈活,對熟悉資料庫的使用者,可以使用dbmanager類,執行sql語句,靈活對資料庫操作。關於dbmanager類,可以參考原始碼中注釋說明。
附錄一、adoce簡介
adoce(active data object for windows ce)技術提供了高層資料庫應用軟體的訪問介面,可在evc、evb等高階語言環境中直接使用,adoce是一種易用的com元件,關於com元件的開發與呼叫在《arm9工控板在遠端監控中的應用》系列文章中有詳細的說明。adoce作為開發wince資料庫應用程度的物件導向的com介面,其訪問資料庫是通過訪問ole db資料提供程式來進行的,並且提供了一種對oledb資料提供程式的簡單高層訪問介面。adoce技術簡化了ole db的操作,在ole db的程式中使用了大量的com介面,而adoce則封裝了這些介面,所以,adoce是一種高層的訪問技術。adoce的資料儲存模型如圖1 所示:
圖1 adoce的資料儲存模型
adoce支援connection、recordset、field、fields、error物件,但不支援command物件、property物件以及properties collection。下面介紹幾個重要的adoce物件。
連線物件(connection)
connection物件建立乙個物件資料來源的資料交換環境,adoce允許建立對access資料來源和sqlce資料來源的連線。
記錄集物件(recordset)
recordset物件是adoce資料操作的核心,它是查詢結果的集合,可以通過這個結果集處理來自資料來源的資料,包括修改記錄、更新記錄、插入和刪除記錄等。可以通過recordset的open方法執行sql語句,實現資料庫的操作。
字段物件(field)
·字段物件的每條記錄都由fields組成,其中包括名稱、資料和值。
·基於adoce的wince資料庫開發程式包括以下基本步驟:
·建立connection物件
·開啟資料來源,建立同資料來源的連線
·建立record物件
·將recordset的連線字串設定到connection物件中
·使用sql命令
·通過recordset物件完成結果記錄集的操作
·終止連線
附錄二、sql語句語法說明
嵌入式資料庫
include include include include int print void para,int columncount,char columnvalue,char columnname 由使用者處理查詢的結果 printf n return0 int main char name 2...
嵌入式資料庫sqlite
自虛擬神話 也許往往大家是不需要像mysql sqlserver這類在複雜的資料庫,那麼sqlite 值得你去嘗試下!什麼是 sqlite sqlite 是一款輕量級的 基於檔案的嵌入式資料庫,2000年就已經誕生,經過多年的發展,直到今天已經成為最流行的,包括google在內的公司在其桌面軟體中亦...
嵌入式資料庫sqlite
自虛擬神話 也許往往大家是不需要像mysql sqlserver這類在複雜的資料庫,那麼sqlite值得你去嘗試下!什麼是 sqlite sqlite 是一款輕量級的 基於檔案的嵌入式資料庫,2000年就已經誕生,經過多年的發展,直到今天已經成為最流行的,包括google在內的公司在其桌面軟體中亦使...