原文連結:
1. 原始碼的擷取
sqlite是一個功能強大、體積小運算速度快的嵌入式資料庫,採用了全C語言封裝,並提供了八十多個命令介面,可移植性強,使用方便。
:http://sqlite.org/download.html
sqlite原始碼:sqlite-3.6.17.tar.gz
2. sqlite移植到x86 for linux
l 解壓檔案
//建立一個檔案夾,將原始碼放在這個檔案夾中。
mkdir /work/sqlite
cp sqlite-3.6.17.tar.gz /work/sqlite
//解壓檔案
cd /work/sqlite
tar xvzf sqlite-3.6.17.tar.gz
l 配置
//建立x86目錄
mkdir sqlite_x86
//開啟檔案
cd sqlite-3.6.17
//配置sqlite
./configure --prefix=/work/sqlite/sqlite_x86 --disable-tcl
l 編譯
make
l 安裝
make install
l 測試
當安裝完成以後,安裝檔案會安裝在/work/sqlite/sqlite_x86目錄中,一種產生了,lib,include和bin三個檔案夾,分別是庫檔案,標頭檔和可執行檔。
到這裡是不是有點躍躍欲試了,是的,我們可以測試sqlite了,當檔案安裝後,我們可以直接通過安裝好的sqlite3來實現。
cd sqlite_x86/bin
./sqlite3 test.db //開啟或建立test.db資料庫檔案
create table test (id integer primary key, value text);
insert into test (value) values('hxl');
insert into test (value) values('sqlite');
insert into test (value) values('test');
insert into test (value) values('for');
insert into test (value) values('linux');
//到此資料庫基本家裡就完成了,來看看資料庫裡面的檔案吧
.mode col
.headers on //列印出資料庫的表頭
select * from test; //顯示資料庫中的所有檔案
.exit //退出
3. sqlite移植到arm
l 配置
//建立x86目錄
mkdir http://www.cnblogs.com/sqlite_arm
//開啟檔案
cd http://www.cnblogs.com/sqlite-3.6.17
//配置sqlite
./configure --prefix=/work/sqlite/sqlite_arm --disable-tcl —host=arm-linux
l 編譯
make
l 安裝
make install
l 測試
當安裝完成以後,安裝檔案會安裝在/work/sqlite/sqlite_x86目錄中,一種產生了,lib,include和bin三個檔案夾,分別是庫檔案,標頭檔和可執行檔。
將lib中的檔案複製到開發板的lib中,現在編寫一個C檔案test.c來驅動它。
#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]); return(1); } rc = sqlite3_open(argv[1], &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return(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; }
非嵌入式下編譯:
gcc -g test.c -o test -lsqlite3
上面的代碼是sqlite官方的測試代碼,雖然很簡單但是也很強大,一般應用都夠了,再瞭解一下sqlite的文法就可以實現強大的功能了,編譯方法如下,在這裡假設你已經安裝好了arm-linux-gcc,我採用的是arm-linux-gcc-4.3.2,編譯方法如下:
arm-linux-gcc -o test test.c -sqlite3 -L/work/sqlite/sqlite_arm/lib -I/work/sqlite/sqlite_arm/include
將資料庫複寫在當前檔案夾,測試方法:
./test ./test test.db "select * from test;"