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...