Sqlite DB使用例子

2021-05-17 20:50:19 字數 2461 閱讀 8072

前一陣字做專案(嵌入式linux),由於要儲存大量的資料,而且最長要儲存30天的時間。本來打算儲存到檔案中,每次啟動應用程式的時候重新解析一遍,可是當資料量很大的時候,就出現效率的問題了。所以最後還是放棄了使用檔案的打算,決定使用資料庫訪問資料。

linux下的資料庫也很多,有開源的,也有收費的。對於我們來說,肯定要使用開源的資料庫。以前用過berkely db,但是需要licience。所以結合效率效能以及大小限制,最終選定了sqlite db。我們對它的評價是「sqlite是乙個優秀的完全free的開源資料專案」。

下面是乙個簡單的使用例項:

int main( int argc, char **argv )

//建立table

sqlite3_prepare(db,

"create table players ( id integer primary key, name text, age interer );",

-1,&stmt,&ztail);

sqlite3_step(stmt);

sqlite3_finalize(stmt);

//插入資料

sqlite3_prepare(db,

"insert into players (name,num) values(?,?);",

-1,&stmt,&ztail);

char str = "kevin";

int n = 23;

sqlite3_bind_text(stmt,1,str,-1,sqlite_static);

sqlite3_bind_int(stmt,2,n);

r = sqlite3_step(stmt);

if( r!=sqlite_done)

sqlite3_reset(stmt);

//插入第二個資料

char str2 = "jack";

int n2 = 16;

sqlite3_bind_text(stmt,1,str2,-1,sqlite_static);

sqlite3_bind_int(stmt,2,n2);

r = sqltie3_step(stmt);

if( r!=sqlite_done)

sqltie3_finalize(stmt);

//查詢所有資料

sqlite3_prepare(db,

"select id, name, num from players order by num;",

-1,&stmt,&ztail);

r = sqlite3_step(stmt);

int number;

int id;

const unsigned char * name;

while( r == sqlite_row )

sqlite3_finalize(stmt);

//關閉資料庫

sqlite3_close(db);

return 0;

} 同時加上標頭檔案#include #icnlude 編譯執行gcc -o sample sample.c ./sample

結果如下:

id:1 name:kevin age:23

id:2 name:jack age:16

簡要說明一下sqlite資料庫執行sql語句的過程

** 呼叫sqlite3_prepare()將sql語句編譯為sqlite內部乙個結構體(sqlite3_stmt).該結構體中包含了將要執行的的sql語句的資訊.

** 如果需要傳入引數,在sql語句中用'?'作為佔位符,再呼叫sqlite3_bind_***()函式將對應的引數傳入.

** 呼叫sqlite3_step(),這時候sql語句才真正執行.注意該函式的返回值,sqlite_done和sqlite_row都是表示執行成功, 不同的是sqlite_done表示沒有查詢結果,象update,insert這些sql語句都是返回sqlite_done,select查詢語句在 查詢結果不為空的時候返回sqlite_row,在查詢結果為空的時候返回sqlite_done.

** 每次呼叫sqlite3_step()的時候,只返回一行資料,使用sqlite3_column_***()函式來取出這些資料.要取出全部的資料需要 反覆呼叫sqlite3_step(). (注意, 在bind引數的時候,引數列表的index從1開始,而取出資料的時候,列的index是從0開始).

** 在sql語句使用完了之後要呼叫sqlite3_finalize()來釋放stmt占用的記憶體.該記憶體是在sqlite3_prepare()時分配的.

** 如果sql語句要重複使用,可以呼叫sqlite3_reset()來清楚已經繫結的引數.

當然了,你也可以根據自己的需要對現有的libsqlite進行一層封裝,使得操作更方便一些。高階的功能還在學習中。。。另外想使用好sqlite db,最好先看一遍sql的語法操作。

epoll使用例子

自從linux提供了 dev epoll的裝置以及後來2.6核心中對 dev epoll裝置的訪問的封裝 system epoll 之後,這種現象得到了大大的緩解,如果說幾個月前,大家還對epoll不熟悉,那麼現在來說的話,epoll的應用已經得到了大範圍的普及。那麼究竟如何來使用epoll呢?其實...

workqueque 使用例子

create singlethread workqueue建立新的workqueque 並會建立乙個專用的核心執行緒,一般不建立是呼叫自動預設的核心執行緒,如果考慮實時性的關係.自定義的核心執行緒處理快一些.預設的如果work 比較多時就會delay bridge wq create singlet...

OpenMp使用例子

參考 openmp是由openmp architecture review board牽頭提出的,並已被廣泛接受的,用於共享記憶體 並行系統的多執行緒程式設計 的一套指導性注釋 compiler directive openmp支援的程式語言 包括c語言 c 和fortran 而支援openmp的編...