來源:http://daydreamer.idv.tw/rewrite.php/read-33.html

 

前一陣子寫裝置管理軟體時,曾經有考慮過使用SQLite這個database,因為它的優點是簡單易用,體積小(56k),記憶體使用量少(100多k),所以我曾經寫一堆wrapper API,把它封裝成方便工程師呼叫的函式,不過後來因為效能和系統整合的考量,又寫了另外一套管理的軟體取代掉先前寫的東西,其實自從離開學校開始工作後,幾乎一個程式都會寫好幾個版本互相比較效能,看看有沒有一個time complexity 和space complexity的平衡點,所以我覺的在學校演算法的基礎要打好一點,ACM多玩一點,對自己幫助很多,不過最好的是能碰到功力高強的同學一起切磋,進步幅度會很快

真是抱歉講了一廢話,因為SQLite的使用實在太簡單了,連它的C API也很簡潔,所以我只好寫些東西充版面,在編譯前先執行cross compile shell script, cross compile shell script範例如下,toolchain也是用ELDK

 

#! /bin/sh 

export PATH=$PATH:/usr/local/eldk/usr/bin/

export CPPFLAGS="-I/usr/local/eldk/arm/usr/include" 

export LDFLAGS="" 

export CFLAGS="" 

export AR=arm-linux-ar 

export AS=arm-linux-as 

export LD=arm-linux-ld 

export RANLIB=arm-linux-ranlib 

export CC=arm-linux-gcc 

export NM=arm-linux-nm 

export ARCH=arm 

 

./configure --target=arm-linux \

--host=arm-linux \

--build=arm-linux-gnu \

--prefix=/usr/local/eldk/sql \

--exec-prefix=/usr/local/eldk/sql \

--disable-tcl

 

編譯完後,把.libs資料夾下的library和binary丟到板子上的/lib和/bin資料夾,記得要補上libdl和libphread這兩個library,執行SQLite會出現如下界面,這邊你可以下SQL command或其它特殊的指令,網路上有一篇文章講到大概的用法,請參考試用

sqlite.jpg 

而它提供的C API有夠簡單的,分為下面三組
(1) sqlite3_open:打開資料庫
(2) sqlite3_exec:執行SQL指令
(3) sqlite3_close:關閉資料庫
範例程式如下

 

    #include <stdio.h> 

#include "../sqlite3.h" 

 

static int callback(void *NotUsed, int argc, char **argv, char **azColName){ 

int i;

for(i=0; i<argc; i++){ 

printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");

} 

printf("\n");

return 0;

} 

 

int main(int argc, char **argv){ 

sqlite3 *db;

char *zErrMsg = 0;

int rc;

 

if( argc!=3 ){ 

fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);

exit(1);

} 

rc = sqlite3_open(argv[1], &db);

if( rc ){ 

fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));

sqlite3_close(db);

exit(1);

} 

rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);

if( rc!=SQLITE_OK ){ 

fprintf(stderr, "SQL error: %s\n", zErrMsg);

sqlite3_free(zErrMsg);

} 

sqlite3_close(db);

return 0;

}

     

arrow
arrow
    全站熱搜

    mybeauty 發表在 痞客邦 留言(1) 人氣()