WINCE下使用SQLite資料庫

來源:互聯網
上載者:User

       SQLite是一個開源的跨平台的輕型資料庫,WINCE本身也有一個內建的資料庫SQLCE ,但佔用的資源會比較大。最近項目中考慮用到 SQLite,因此特別研究了一下,下面介紹一下具體的移植方法。

一、下載SQLite源碼

       去SQLite官網http://www.sqlite.org/download.htm下載最新的source code。我下載的是sqlite-amalgamation-3071401.zip。解壓後會得得到四個檔案(shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h)。

二、編譯產生WINCE下DLL

      1. 在VS2005下建立一個Win32智慧型裝置項目,選擇相應的SDK,並選擇應用程式類型為DLL。

      2. 將sqlite-amalgamation-3071401.zip解壓後的sqlite3.c、sqlite3.h檔案拷貝到工程目錄下並添加至工程目錄。如所示。

            

       3.在預先處理中增加SQLITE_ENABLE_RTREE和SQLITE_ENABLE_COLUMN_METADATA宏定義。:

           

        4.編譯項目,會提示“error LNK2019: 無法解析的外部符號 localtime_s,該符號在函數 osLocaltime 中被引用”錯誤,此錯誤的解決方案是將localtime_s替換成_localtime64_s即可。

        5.編譯成功後會發現目錄下會產生SQLite.dll檔案,但會發現沒有lib檔案,這樣在使用這個DLL時是沒法編譯的,所以還需要匯出.lib檔案,解決方案是在SQLite官網上下載sqlite-dll-win32-x86-XXXXXX.zip檔案,解壓後將目錄下的sqlite3.def檔案拷貝到DLL工程目錄,在項目屬性--連結器--輸入--模組定義檔案中添加sqlite3.def,如所示,然後編譯即可。

           

這樣SQLite的編譯工作就大功告成了。

三、WINCE 下SQLite測試

        建立一個SQLite測試程式,測試代碼如下:       

#include <windows.h>// sqlite3的回呼函數int SQLiteQueryResultCallBack( void * para, int n_column, char ** column_value, char ** column_name )int main(int argc,char* argv[]){sqlite3 * db = NULL; //聲明sqlite關鍵結構指標int result;// 開啟或建立資料庫result = sqlite3_open("NAND2\\sqlite.db", &db );if( result != SQLITE_OK ){//資料庫開啟失敗return -1;}char * errmsg = NULL;// 資料庫作業碼#if 1// 建立一個測試表,表名叫 MyTable,有2個欄位: ID 和 name。其中ID是一個自動增加的類型,以後insert時可以不去指定這個欄位,它會自己從0開始增加result = sqlite3_exec( db, "create table MyTable( ID integer primary key autoincrement, name nvarchar(32) )", NULL, NULL, &errmsg );if(result != SQLITE_OK ){printf("建立表失敗,錯誤碼:%d,錯誤原因:%s\n", result, errmsg );}// 插入記錄result = sqlite3_exec( db, "insert into MyTable( name ) values ( '張三' )", 0, 0, &errmsg );if(result != SQLITE_OK ){printf("插入記錄失敗,錯誤碼:%d,錯誤原因:%s\n", result, errmsg );}// 插入記錄result = sqlite3_exec( db, "insert into MyTable( name ) values ( '李四' )", 0, 0, &errmsg );if(result != SQLITE_OK ){printf("插入記錄失敗,錯誤碼:%d,錯誤原因:%s\n", result, errmsg );}#endif// 開始查詢資料庫result = sqlite3_exec( db, "select * from MyTable", SQLiteQueryResultCallBack, NULL, &errmsg );// 關閉資料庫sqlite3_close( db );return 0;}// sqlite3的回呼函數int SQLiteQueryResultCallBack( void * para, int n_column, char ** column_value, char ** column_name ){printf( "******************************\n" );printf("記錄包含 %d 個欄位\n", n_column );for(int i = 0 ; i < n_column; i ++ ){printf( "欄位名:%s 欄位值:%s\n", column_name[i], column_value[i] );}printf( "******************************\n" );return 0;}

四、SQLite可視化管理工具

        SQLite本身沒有可視化管理工具,只提供了一個命令列的管理工具SQLite.exe。有一個第三方的可視化管理工具Sqlite Expert,用著還可以,: http://www.sqliteexpert.com/download.html

        

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.