sqlite -API-sqlite3_exec()

來源:互聯網
上載者:User

標籤:


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()

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.