輕量級資料sqlite的C++調用樣本

來源:互聯網
上載者:User

標籤:

原文地址:http://www.cnblogs.com/kfqcome/archive/2011/06/27/2136999.html

#include "stdafx.h"#include "sqlite3.h"static int callback(void *NotUsed, int argc, char **argv, char **azColName){    int i;    for(i=0; i<argc; i++){       printf("%s = %s/n", azColName[i], argv[i] ? argv[i] : "NULL");    }    printf("/n");    return 0;}#define CHECK_RC(rc,szInfo,szErrMsg,db) if(rc!=SQLITE_OK) \           {printf("%s error!/n",szInfo);           printf("%s/n",szErrMsg);           sqlite3_free(szErrMsg);           sqlite3_close(db);           return 0;}int _tmain(int argc, _TCHAR* argv[]){      sqlite3 *db;    char *dbPath="f:/test.db";    char *szErrMsg = 0;      int rc= sqlite3_open(dbPath, &db);    CHECK_RC(rc,"open database",db);    char *szSql="create table UserInfo(ID int primary key , UserName char, PassWord char);";    rc=sqlite3_exec(db,szSql,0,0,&szErrMsg);    CHECK_RC(rc,"create table",szErrMsg,db);    rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(1,‘kfqcome‘,‘123456‘)",0,0,&szErrMsg);    CHECK_RC(rc,"insert info",szErrMsg,db);    rc=sqlite3_exec(db,"insert into UserInfo(ID,UserName,PassWord) values(2,‘miss wang‘,‘654321‘)",0,0,&szErrMsg);    CHECK_RC(rc,"insert info",szErrMsg,db);    szSql="select * from UserInfo";    rc = sqlite3_exec(db,szSql, callback, 0, &szErrMsg);    CHECK_RC(rc,"query values",szErrMsg,db);    sqlite3_close(db);    getchar();    return 0;}

 

 

  輸出的結果:

ID = 1

UserName = kfqcome

PassWord = 123456

 

ID = 2

UserName = miss wang

PassWord = 654321

 

這裡執行sql語句用的是sqlite3_exec,它是前面幾個函數的封裝

 

int sqlite3_exec(

  sqlite3*,                                  /* 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 */

);

sqlite3_exec是sqlite3_prepare_v2,sqlite3_step()和sqlite3_finalize()的封裝,能讓程式多次執行sql語句而不要寫許多重複的代碼。

Sqlite3_exec介面執行0或多個UTF-8編碼的,分號分割的sql語句,傳到第二個參數中。如果sqlite3_exec的第三個參數回呼函數指標不為空白,那麼它會為每個來自執行的SQL語句的結果行調用(也就是說回呼函數會調用多次,上面例子中會返回2個結果行,因而會被執行2次),第4個參數是傳給回呼函數的第一個參數,如果回呼函數指標為空白,那麼回調不會發生同時結果行被忽略。

如果在執行sql語句中有錯誤發生,那麼當前的語句的執行被停止,後續的語句也被跳過。第五個參數不為空白的時候,它被分配記憶體並寫入了錯誤資訊,所以在sqlite3_exec後面需要調用sqlite3_free去釋放這個對象以防止記憶體泄露

 

回呼函數:

int (*callback)(void*,int,char**,char**),  /* Callback function */

         第一個參數通過sqlite3_exec的第第四個參數傳入的

         第二個參數是結果行的列數

         第三個參數是行中列資料的指標

         第四個參數是行中列名稱的指標

輕量級資料sqlite的C++調用樣本

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.