sqlite使用說明及在POWERPC平台上的移植

2021-06-05 18:42:16 字數 4789 閱讀 3189

sqlite是乙個開源的嵌入式關聯式資料庫,它在2023年由d. richard hipp發布,它的減少應用程式管理資料的開銷,sqlite可移植性好,可以工作在許多嵌入式作業系統下,比如qnx,vxworks,palm os, symbin和windows ce,同時,sqlite是乙個輕量級的嵌入式資料庫,很適合用於嵌入式裝置。

sqlite嵌入到使用它的應用程式中,它們共用相同的程序空間,而不是單獨的乙個程序,但在程序內部,它卻是完整的自包含的資料庫引擎。

int sqlite3_open(char *path,sqlite3 **db)

這個函式開啟資料庫,第乙個引數為sqlite檔案的位址,第二個引數是sqlite3的指標的指標,也就是二級指標。

返回值為sqlite_ok則成功開啟資料庫。

sqlite3_close(sqlite3 *db)

這個函式關閉資料庫,引數是sqlite3的指標。

sqlite3_exec(sqlite3 *db,char *sql,int l,int m,int n)

這個函式執行sql語句,如果我們不需要返回的結果就用這個函式執行sql語句。第乙個引數是sqlite3的指標,第二個引數為執行的sql語句,後面3個引數我們不用關心,都設為0。

sqlite3_get_table(sqlite *db,char *sql,char ***result,int *row,int *column,int k);

這個函式執行查詢語句,返回我們所需要的資訊。第乙個引數是sqlite的指標,第二個引數是sql語句,第三個引數是返回的資訊。row是返回的行數,column是返回的列數,最後乙個引數設為0就行了。

基於實際專案需求,以下主要講述交叉編譯的步驟:

$ tar zxf sqlite-amalgamation-3.6.22.tar.gz

$ cd sqlite-3.6.22

$ cc=ppc_8xx-gcc ld=ppc_8xx-ld ./configure --host=ppc-linux

$ make

然後將生成的動態庫拷貝到根檔案系統/usr/lib中.

由於在主機上已經有x86版本的libsqlite3.so,我們交叉編譯生成的libsqlite3.so不能在主機上make install,否則會覆蓋掉x86版本的libsqlite3.so.我們編譯應用程式時要把交叉編譯出的libsqlite3.so拷到應用程式工程目錄中,最好是和應用程式的makefile同一級目錄中,同時要把sqlite3.h標頭檔案拷到同一級目錄中,並在makefile中用-l. –i.分別指定庫和標頭檔案路徑,最後將交叉編譯生成的應用程式和在主機上建好的xx.db資料庫檔案拷貝到目標板上同一級目錄中,將交叉編譯出的libsqlite3.so拷到目標板的/usr/lib目錄中,同時在/usr/lib中建立乙個指向libsqlite3.so的軟鏈結libsqlite3.so.0, 否則會報錯。另外如果需要在目標板上使用sqlite3的命令列命令,則還需要將交叉編譯出的可執行檔案sqlite3拷貝到目標板上/usr/bin中.

$ sqlite3 test.db //建立/開啟資料庫檔案

sqlite>

sqlite> create table table_name(id integer primary key, name text, gender text, age integer); //建立**示例

sqlite> .tables //顯示test.db中存在的**

sqlite> .schema table_name //顯示表名及各字段的名稱/資料型別

sqlite> .drop table table_name //刪除表

sqlite> .import data.txt table_name //從資料檔案data.txt中匯入資料到**中, data.txt中每一列用|分隔, |兩邊不要空格,檔案末尾不要有空行:

例如 1|richardstallman|male|24         

sqlite> .exit //退出

//插入一條記錄到表裡

insert into table_name values (5, 'li', 'female', 23);

// 查詢id欄位大於2的記錄,並根據年齡欄位按降序排列

select * from table_name where id>2 order by age desc;

// 查詢id欄位大於2的記錄,並只顯示id,name,gender三個字段

select id>2, name, gender from table_name;

// 顯示表中的所有記錄

select * from table_name;

// 從第三行開始,查詢10條記錄:

select * from table_name limit 3,10;

// 刪除id欄位等於5或name欄位為』tom』的記錄

delete from table_name where id=5 or name='tom';

// 更新表中name欄位為『zh』的記錄的age和name欄位的值

update table_name set age=25, name='zhang' where name='zh';

//部分匹配地模糊查詢,模糊查詢效率很低,盡量不要使用

select * from table_name where id like '%216%';

int sqlite3_open(const char *filepath, sqlite3 **db);

int sqlite3_exec(

sqlite3 *db,         /* an open database */

const char *sql,     /* sql to be executed */

sqlite_callback,     /* callback function */

void *,              /* 1st argument to callback function */

char **errmsg        /* error msg written here */

};int sqlite3_get_table(

sqlite3 *db,         /* an open database */

const char *sql,     /* sql command string */

char ***dbresult,    /* the address of a char **buffer which to hold enquiry result */

int *nrow,           /* row of segment */

int *ncolumn,        /* column of segment */

char **errmsg);      /* error message buffer */

int

sqlite3_close(sqlite3 *db);

sqlite 是支援事務處理的。如果你知道你要同步刪除很多資料,不仿把它們做成乙個統一的事務。通常一次 sqlite3_exec 就是一次事務,如果你要刪除1萬條資料,sqlite就做了1萬次:開始新事務->刪除一條資料->提交事務->開始新事務->… 的過程。這個操作是很慢的。因為時間都花在了開始事務、提交事務上。你可以把這些同類操作做成乙個事務,這樣如果操作錯誤,還能夠回滾事務。事務的操作沒有特別的介面函式,它就是乙個普通的 sql 語句而已。

分別如下:

int result;

result = sqlite3_exec( db, "begin transaction", 0, 0, &zerrormsg ); //開始乙個事務

result = sqlite3_exec( db, "commit transaction", 0, 0, &zerrormsg ); //提交事務

result = sqlite3_exec( db, "rollback transaction", 0, 0, &zerrormsg ); //回滾事務

int db_init(const char *db_filepath, db_handler **db);

int db_sql(db_handler *db, const char *sql, char ***dbresult, int *nrow, int *ncolumn, char **errmsg);

int db_term(db_handler *db, char **dbresult);

/* test_db.c */

#include "db.h"

int main( int argc, char **argv)

result = db_init(argv[1], &db);

if(result != db_ok)

result = db_sql( db, "select * from table1", &dbresult, &nrow, &ncolumn, &errmsg );

if(db_ok == result)

printf("-------\n");}}

db_term(db, dbresult);

return 0;

}/* makefile */

src+=db.c test_db.c

cflag=-lsqlite3 -l. -i.

cc=gcc

cross_compile=ppc_8xx-

$(obj): $(src)

$(cross_compile)$(cc) -o $@ $^ $(cflag)

clean:

rm -rf $(obj)

Sqlite使用說明 (轉載)

os x自從10.4後把sqlite這套相當出名的資料庫軟體,放進了作業系統工具集裡。os x包裝的是第三版的sqlite,又稱sqlite3。這套軟體有幾個特色 支援大多數的sql指令 下面會簡單介紹 乙個檔案就是乙個資料庫。不需要安裝資料庫伺服器軟體。完整的unicode支援 因此沒有跨語系的問...

Devcpp Dev C 使用說明及技巧

本文僅適合初學程式設計的人學習,菜鳥以上級別請飄過.dev c 是乙個windows下的c和c 程式的整合開發環境。它使用mingw32 gcc編譯器,遵循c c 標準。開發環境包括多頁面視窗 工程編輯器以及偵錯程式等,在工程編輯器中集合了編輯器 編譯器 連線程式和執行程式,提供高亮度語法顯示的,以...

Select 使用說明及教程

確定乙個或多個套介面的狀態,如 需要則等待。include int pascal far select int nfds,fd set far readfds,fd set far writefds,fd set far exceptfds,const struct timeval far time...