sqlite -API-sqlite3_exec()



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;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM