二. 在wince上使用sqlite資料庫:
1. 環境:EVC4 + sp4
1). 在 http://sqlite-wince.sourceforge.net/ 中下載 SQLite for Windows CE 的DLL 原始碼.
2). eVC裡建立一個“WCE Dynamic-Link Library”工程,命名為:sqlite
3). 在接下來的對話方塊中選擇"An empty Windows CE DLL project",點擊 FINISH,之後再點擊 OK
4). 將源碼中所有的 *.c *.h *.def 複製到工程檔案夾下
5). 添加所有除shell.c和tclsqlite.c檔案外所有檔案到項目中。
6). 編譯產生sqlite.lib和sqlite.dll.
2. 在 http://softvoile.com/development/CppSQLite3U/下載 高人用C++封裝的sqlite的類,(基於上面產生的sqlite.lib)
一般來講,我們都會是先在windows上使用sqlite的資料庫,並匯入基礎資料。然後把資料庫copy到wince裡,再操作。
此類是封裝的sqlite的unicode函數,能在windows下和wince下都正常使用,但有一點要注意:
如果要在windows下使用,因為VC6預設是建的_MBCS項目,而如果要調用unicode的函數,產生utf16資料以供在wince下能正常顯示中文,則需要把項目的編譯參數從_MBCS
改為:UNICODE _UNICODE。
3. 這下我們就可以在evc4裡面操作sqlite資料庫了:
//開啟資料庫
CppSQLite3DB db;
//開啟或建立一個資料庫
db.open(L"//ding.db");
//建立表
db.execDML(L"create table sninfo(id nchar(12), area nvarchar(6), info nvarchar(60),source nchar(6), target nchar(6))");
//查詢
CppSQLite3Query q = db.execQuery(L"select * from sninfo where area='廣州區'");
CString strTemp;
while (!q.eof())
{
strTemp.Format(_T("%s-%s-%s-%s"),q.fieldValue(0),q.fieldValue(3),q.fieldValue(4),q.fieldValue(1));
m_list.AddString(strTemp); //顯示到listbox控制項中
q.nextRow();
}
q.finalize();
db.close();
4.對sqlite的資料庫操作就介紹到這裡,我目前也就用了這麼多,更多的我也需要學習,在windows下用sqlite要注意一點的是,資料庫的路徑中不要含有中文字,否則會開啟失敗,如果非要用中文,那必須得轉成utf-8才行,sqlite內部是通過utf-8來讀取的。(wince下可以正常使用中文路徑,因為wince預設就是unicode編碼)
三. 後記
對比了一下sqlce和sqlite在查詢50W記錄時的效能,都可以在2秒鐘之內完成,(一開始我沒建index,查了4分多鐘,暈),一定記得要建索引哦。否則查詢N慢。
文筆不好,水平有限,記錄的不是很清楚,寫得不對的地方還請大家指正,一起學習一起進步。