久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > c/c++使用數據(ju)庫(ku)sqlite3

c/c++使用(yong)數據庫sqlite3 時間:2017-11-16      來源(yuan):未知

1 打開數據庫連接sqlite3_open用法

原型:

int sqlite3_open(

  const char *filename,   /* Database filename (UTF-8) */

 ; sqlite3 **ppDb          /* OUT: SQLite db handle */

);

用這個函數開(kai)始(shi)數據(ju)庫操(cao)(cao)作。需要(yao)傳入(ru)兩個參(can)數,一是數據(ju)庫文(wen)件名,比如(ru):E:/test.db。文(wen)件名不(bu)需要(yao)一定(ding)存在(zai),如(ru)果(guo)(guo)此文(wen)件不(bu)存在(zai),sqlite會自動建(jian)立它。如(ru)果(guo)(guo)它存在(zai),就嘗試把它當數據(ju)庫文(wen)件來(lai)打開(kai)。二是sqlite3**,即(ji)前面提到(dao)的關鍵(jian)數據(ju)結構(gou)。這個結構(gou)底層細節如(ru)何,你不(bu)要(yao)管它。 函數返回值(zhi)(zhi)表示操(cao)(cao)作是否正確,如(ru)果(guo)(guo)是SQLITE_OK則(ze)表示操(cao)(cao)作正常(chang)。相關的返回值(zhi)(zhi)sqlite定(ding)義了一些(xie)宏。具(ju)體(ti)這些(xie)宏的含義可以(yi)參(can)考sqlite3.h 文(wen)件。里(li)面有詳(xiang)細定(ding)義(順便說一下(xia),sqlite3 的代碼注釋(shi)率自稱(cheng)是非常(chang)高的,實際上也的確很高。只(zhi)要(yao)你會看英文(wen),sqlite  可以(yi)讓你學到(dao)不(bu)少東西)。

2 關(guan)閉數(shu)據(ju)庫鏈接sqlite3_close用法

原型:

int sqlite3_close(sqlite3 *ppDb);

ppDb為剛才使用(yong)sqlite3_open打(da)開的數據(ju)庫鏈接

3 執(zhi)行(xing)sql操作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 */

 );

這(zhe)就是執行一條(tiao)sql 語(yu)句的函數。 

第(di)1個(ge)參數是前面open函數得到的(de)指針。說了是關鍵(jian)數據結構(gou)。 

第2個參數(shu)constchar*sql是(shi)一(yi)條sql 語句(ju),以(yi)\0結尾。 

第3個(ge)參(can)數sqlite3_callback 是回調,當這條(tiao)語(yu)句執行(xing)之后,sqlite3會去(qu)調用(yong)你(ni)提(ti)供(gong)的這個(ge)函(han)數。 

第4個(ge)(ge)參數(shu)(shu)(shu)void*是(shi)你所提供的(de)指(zhi)針(zhen),你可(ke)(ke)以(yi)傳(chuan)遞任何一個(ge)(ge)指(zhi)針(zhen)參數(shu)(shu)(shu)到(dao)這(zhe)里,這(zhe)個(ge)(ge)參數(shu)(shu)(shu)終會傳(chuan)到(dao)回(hui)調函數(shu)(shu)(shu)里面,如果(guo)不需要傳(chuan)遞指(zhi)針(zhen)給回(hui)調函數(shu)(shu)(shu),可(ke)(ke)以(yi)填NULL。等(deng)下我們再看回(hui)調函數(shu)(shu)(shu)的(de)寫 法,以(yi)及這(zhe)個(ge)(ge)參數(shu)(shu)(shu)的(de)使(shi)用。 

第5個參(can)數(shu)(shu)char** errmsg 是錯誤(wu)信息(xi)(xi)。注意是指(zhi)針(zhen)(zhen)(zhen)的(de)指(zhi)針(zhen)(zhen)(zhen)。sqlite3里(li)面有(you)很多(duo)固定的(de)錯誤(wu)信息(xi)(xi)。執行sqlite3_exec 之后,執行失敗時可(ke)(ke)以查閱這(zhe)(zhe)個指(zhi)針(zhen)(zhen)(zhen)(直接cout<<errmsg得到(dao)一串字符串信息(xi)(xi),這(zhe)(zhe)串信息(xi)(xi)告(gao)訴你(ni)錯在什(shen)么(me)地方。sqlite3_exec函(han)數(shu)(shu)通(tong)過修改你(ni)傳入(ru)的(de)指(zhi)針(zhen)(zhen)(zhen)的(de)指(zhi)針(zhen)(zhen)(zhen),把(ba)你(ni)提(ti)供(gong)的(de)指(zhi)針(zhen)(zhen)(zhen)指(zhi)向(xiang)錯誤(wu)提(ti)示信息(xi)(xi),這(zhe)(zhe)樣(yang)sqlite3_exec函(han)數(shu)(shu)外面就(jiu)可(ke)(ke)以通(tong)過這(zhe)(zhe)個char*得到(dao)具體錯誤(wu)提(ti)示。 說明:通(tong)常(chang),sqlite3_callback 和它后面的(de)void*這(zhe)(zhe)兩(liang)個位置都可(ke)(ke)以填(tian)NULL。填(tian)NULL表示你(ni)不(bu)需要(yao)回(hui)(hui)調。比如你(ni)做(zuo)insert 操作,做(zuo)delete操作,就(jiu)沒有(you)必(bi)要(yao)使(shi)(shi)用(yong)回(hui)(hui)調。而當你(ni)做(zuo)select 時,就(jiu)要(yao)使(shi)(shi)用(yong)回(hui)(hui)調,因為sqlite3 把(ba)數(shu)(shu)據查出來(lai),得通(tong)過回(hui)(hui)調告(gao)訴你(ni)查出了什(shen)么(me)數(shu)(shu)據。

exec 的回調(diao)

typedef int(*sqlite3_callback)(void*,int,char**,char**); 

你的回調(diao)函數必須(xu)定義成上面這個函數的類型(xing)。

下面給個簡(jian)單(dan)的例子: 

//sqlite3的(de)回(hui)調函(han)數 

//sqlite 每查(cha)到一(yi)條(tiao)記錄(lu),就調用一(yi)次這個回調 int LoadMyInfo(void* para,intn_column,char** column_value,char** column_name);

//para是你(ni)在sqlite3_exec 里傳(chuan)入(ru)的void*參數通過para參數,你(ni)可以傳(chuan)入(ru)一(yi)些特殊的指針(zhen)(zhen)(比如(ru)類指針(zhen)(zhen)、結構指針(zhen)(zhen)),

 //然(ran)后在這(zhe)(zhe)里面強制轉換成對(dui)應的(de)類(lei)型(xing)(這(zhe)(zhe)里面是void*類(lei)型(xing),必須強制轉換成你的(de)類(lei)型(xing)才可(ke)用)。然(ran)后操作這(zhe)(zhe)些數據 

//n_column是這一(yi)條(tiao)記(ji)錄有(you)多少個字(zi)段(duan)(即這條(tiao)記(ji)錄有(you)多少列) 

//char** column_value 是個(ge)關鍵(jian)值,查出(chu)來的數據都保存在這里(li),它實際(ji)上是個(ge)1維(wei)數組(不要以為是2維(wei)數組),

 //每一個元素(su)都是一個char*值,是一個字段內(nei)容(用字符串來(lai)表示,以\0結尾)  

//char** column_name 跟column_value是對應的,表示這(zhe)個字(zi)段的字(zi)段名稱

實例:

 1 #include <iostream> 

2 using namespace std; 

3 #include "sqlite/sqlite3.h" 

4 int callback(void*,int,char**,char**); 

5 int main() 

6 { 

7     sqlite3* db; 

8     int nResult = sqlite3_open("test.db",&;db);

 9     if (nResult != SQLITE_OK)

10     {

11 &nbsp;       cout<<"打(da)開數據庫失敗:"<<sqlite3_errmsg(db)<<endl;

12         return 0;

13     }

14     else

15     {

16      ; &nbsp; cout<<"數據(ju)庫打開成功"<<endl;

17     }

18 

19     char* errmsg;

20 

21   &nbsp; nResult = sqlite3_exec(db,"create table fuck(id integer primary key autoincrement,name varchar(100))",NULL,NULL,&errmsg);

22     &nbsp;if (nResult != SQLITE_OK)

23      {

24 &nbsp;        sqlite3_close(db);

25     &nbsp;    cout<<errmsg;

26 &nbsp;        sqlite3_free(errmsg);

27         return 0;

28     }

29     string strSql;

30     strSql+="begin;\n";

31     for (int i=0;i<100;i++)32 &nbsp;   {

33         strSql+="insert into fuck values(null,'heh');\n";

34     }

35     strSql+="commit;";

36     //cout<<strSql<<endl;

37 

38 &nbsp;   nResult = sqlite3_exec(db,strSql.c_str(),NULL,NULL,&errmsg);

39 

40     if (nResult != SQLITE_OK)

41     {

42       &nbsp; sqlite3_close(db);

43      ;   cout<<errmsg<<endl;

 44         sqlite3_free(errmsg);

45         return 0;

46     }

47 

48     strSql = &quot;select * from fuck";

49     nResult = sqlite3_exec(db,strSql.c_str(),callback,NULL,&errmsg);

50   &nbsp;   if (nResult != SQLITE_OK)

51     {

52      ;   sqlite3_close(db);

53 &nbsp;       cout<<errmsg&lt;<endl;

54         sqlite3_free(errmsg);

55         return 0;

56     }

57 

58     sqlite3_close(db);

59     return 0;

60 }

61 

62 int callback(void* ,int nCount,char** pValue,char** pName)

63 {

64     string s;

65     for(int i=0;i<nCount;i++)

66     {

67         s+=pName[i];

68     &nbsp;   s+=&quot;:";

69         s+=pValue[i];

70         s+="\n&quot;;

71     }

72     cout<<s<<endl;

73     return 0;

74 }

注意:創建一個(ge)表(biao)、往表(biao)里(li)插入數據(ju)可以(yi)用sqlite3_exec,而(er)查詢表(biao)里(li)的數據(ju)用sqlite3_get_table。

上一篇:qt化步驟

下一篇:FS4412開發板使用Linux IIO驅動框架實現ADC驅動

熱點文章推薦
華清學員就業榜(bang)單
高薪學員經驗(yan)分享
熱(re)點新聞推薦
前臺(tai)專線:010-82525158 企業培訓洽(qia)談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,,京公海網安備11010802025203號

回到頂部