標籤:
sqlite3_exec用法
原型:
int sqlite3_exec( sqlite3* ppDb, /* An open database */ const char *sql, /* SQL to be evaluated */ int (*callback)(void*,int,char**,char**), /* Callback function */ void *, /* 1st argument to callback */ char **errmsg /* Error msg written here */);
執行sql語句
得到結果集,可通過回呼函數輸出
有回呼函數
這就是執行一條sql 語句的函數。
第1個參數不再說了,是前面open函數得到的指標。說了是關鍵資料結構。
第2個參數constchar*sql是一條sql 語句,以\0結尾。
第3個參數sqlite3_callback 是回調,當這條語句執行之後,sqlite3會去調用你提供的這個函數。
第4個參數void*是你所提供的指標,你可以傳遞任何一個指標參數到這裡,這個參數最終會傳到回呼函數裡面,如果不需要傳遞指標給回呼函數,可以填NULL。等下我們再看回呼函數的寫
法,以及這個參數的使用。
第5個參數char** errmsg 是錯誤資訊。注意是指標的指標。sqlite3裡面有很多固定的錯誤資訊。執行sqlite3_exec 之後,執行失敗時可以查閱這個指標(直接cout<<errmsg得到一串字串資訊,這串資訊告訴你錯在什麼地方。sqlite3_exec函數通過修改你傳入的指標的指標,把你提供的指標指向錯誤提示資訊,這樣sqlite3_exec函數外面就可以通過這個char*得到具體錯誤提示。
說明:通常,sqlite3_callback 和它後面的void*這兩個位置都可以填NULL。填NULL表示你不需要回調。比如你做insert 操作,做delete操作,就沒有必要使用回調。而當你做select 時,就要使用回調,因為sqlite3 把資料查出來,得通過回調告訴你查出了什麼資料。
回呼函數格式
int sqlite_callback(
void* pv, /* 由 sqlite3_exec() 的第四個參數傳遞而來 */
int argc, /* 表的列數 */
char** argv, /* 指向查詢結果的指標數組, 可以由 sqlite3_column_text() 得到 */ //列內容
char** col /* 指向表頭名的指標數組, 可以由 sqlite3_column_name() 得到 */ //列名
);
參數格式:
傳給sqlite3_exec的回呼函數,用來顯示查詢結果
對每一條查詢結果調用一次該回呼函數
參數:
pv:由sqlite3_exec傳遞的初始化參數
argc:表頭的列數
col:表頭的名字數組指標
argv:表頭的資料數組指標
傳回值:
1:中斷尋找
0:繼續列舉查詢到的資料
樣本表:
+-----------------------------------+
| id | pic | data(16進位資料) |
|-----------------------------------|
| 1 | a.jpg | 00 00 00 ... |
|-----------------------------------|
| 2 | b.jpg | XX XX XX |
+-----------------------------------+
對第一行資料:
argc=3 即 [0]...[2]
argv[0]="1",argv[1]="a.jpg",argv[2]="00 00 00..."(實際16進位資料,非這裡顯示的字串形式)
col[0]="id",col[1]="pic",col[2]="data"
說明:
sqlite3_exec() 的回呼函數必須按照此格式, 當然形參的名字任意.
如果某列的資料類型不是char*, 則可以對結果執行相關的轉換, 如:用atoi()把結果轉換為整數(integer), 如果是位元據, 則可以直接強制類型轉換, 如:(void*)argv[i].
該回呼函數有兩種傳回值類型.
1.返回零:sqlite3_exec() 將繼續執行查詢.
2.返回非零:sqlite3_exec()將立即中斷查詢, 且 sqlite3_exec() 將返回 SQLITE_ABORT.
樣本:
int i;
for(i=0; i<argc; i++)
{
printf("%s\t%s\n\n", col[i], argv[i]);
}
return 0;
sqlite -API-sqlite3_exec()