gogo专业大尺度亚洲高清人体,美女张开双腿让男生桶,亚洲av无码一区二区三区鸳鸯影院,久久久久国产精品人妻

當(dāng)前位置:首頁(yè) > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > sqlite入門基礎(chǔ)(一):sqlite3_open,sqlite3_exec,slite3_close

sqlite入門基礎(chǔ)(一):sqlite3_open,sqlite3_exec,slite3_close 時(shí)間:2018-09-26      來(lái)源:未知

打開(kāi)數(shù)據(jù)庫(kù)鏈接sqlite3_open用法

原型:

int sqlite3_open(

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

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

);

用這個(gè)函數(shù)開(kāi)始數(shù)據(jù)庫(kù)操作。需要傳入兩個(gè)參數(shù),一是數(shù)據(jù)庫(kù)文件名,比如:E:/test.db。文件名不需要一定存在,如果此文件不存在,sqlite會(huì)自動(dòng)建立它。如果它存在,就嘗試把它當(dāng)數(shù)據(jù)庫(kù)文件來(lái)打開(kāi)。二是sqlite3**,即前面提到的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。這個(gè)結(jié)構(gòu)底層細(xì)節(jié)如何,你不要管它。

函數(shù)返回值表示操作是否正確,如果是SQLITE_OK則表示操作正常。相關(guān)的返回值sqlite定義了一些宏。具體這些宏的含義可以參考sqlite3.h 文件。里面有詳細(xì)定義(順便說(shuō)一下,sqlite3 的代碼注釋率自稱是非常高的,實(shí)際上也的確很高。只要你會(huì)看英文,sqlite 可以讓你學(xué)到不少東西)。

關(guān)閉數(shù)據(jù)庫(kù)鏈接sqlite3_close用法

原型:

int sqlite3_close(sqlite3 *ppDb);

ppDb為剛才使用sqlite3_open打開(kāi)的數(shù)據(jù)庫(kù)鏈接

執(zhí)行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 */

);

這就是執(zhí)行一條sql 語(yǔ)句的函數(shù)。

第1個(gè)參數(shù)不再說(shuō)了,是前面open函數(shù)得到的指針。說(shuō)了是關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。

第2個(gè)參數(shù)constchar*sql是一條sql 語(yǔ)句,以\0結(jié)尾。

第3個(gè)參數(shù)sqlite3_callback 是回調(diào),當(dāng)這條語(yǔ)句執(zhí)行之后,sqlite3會(huì)去調(diào)用你提供的這個(gè)函數(shù)。

第4個(gè)參數(shù)void*是你所提供的指針,你可以傳遞任何一個(gè)指針參數(shù)到這里,這個(gè)參數(shù)終會(huì)傳到回調(diào)函數(shù)里面,如果不需要傳遞指針給回調(diào)函數(shù),可以填NULL。等下我們?cè)倏椿卣{(diào)函數(shù)的寫法,以及這個(gè)參數(shù)的使用。

第5個(gè)參數(shù)char** errmsg 是錯(cuò)誤信息。注意是指針的指針。sqlite3里面有很多固定的錯(cuò)誤信息。執(zhí)行sqlite3_exec 之后,執(zhí)行失敗時(shí)可以查閱這個(gè)指針(直接cout<

說(shuō)明:通常,sqlite3_callback 和它后面的void*這兩個(gè)位置都可以填NULL。填NULL表示你不需要回調(diào)。比如你做insert 操作,做delete操作,就沒(méi)有必要使用回調(diào)。而當(dāng)你做select 時(shí),就要使用回調(diào),因?yàn)閟qlite3 把數(shù)據(jù)查出來(lái),得通過(guò)回調(diào)告訴你查出了什么數(shù)據(jù)。

exec 的回調(diào)

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

你的回調(diào)函數(shù)必須定義成上面這個(gè)函數(shù)的類型。下面給個(gè)簡(jiǎn)單的例子:

//sqlite3的回調(diào)函數(shù)

//sqlite 每查到一條記錄,就調(diào)用一次這個(gè)回調(diào)

int LoadMyInfo(void* para,intn_column,char** column_value,char** column_name);

//para是你在sqlite3_exec 里傳入的void*參數(shù)通過(guò)para參數(shù),你可以傳入一些特殊的指針(比如類指針、結(jié)構(gòu)指針),

//然后在這里面強(qiáng)制轉(zhuǎn)換成對(duì)應(yīng)的類型(這里面是void*類型,必須強(qiáng)制轉(zhuǎn)換成你的類型才可用)。然后操作這些數(shù)據(jù)

//n_column是這一條記錄有多少個(gè)字段(即這條記錄有多少列)

//char** column_value 是個(gè)關(guān)鍵值,查出來(lái)的數(shù)據(jù)都保存在這里,它實(shí)際上是個(gè)1維數(shù)組(不要以為是2維數(shù)組),

//每一個(gè)元素都是一個(gè)char*值,是一個(gè)字段內(nèi)容(用字符串來(lái)表示,以\0結(jié)尾)

//char** column_name 跟column_value是對(duì)應(yīng)的,表示這個(gè)字段的字段名稱

實(shí)例:

#include

using namespace std;

#include "sqlite/sqlite3.h"

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

int main()

{

sqlite3* db;

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

if (nResult != SQLITE_OK)

{

cout<<"打開(kāi)數(shù)據(jù)庫(kù)失。"<

return 0;

}

else

{

cout<<"數(shù)據(jù)庫(kù)打開(kāi)成功"<

}

char* errmsg;

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

if (nResult != SQLITE_OK)

{

sqlite3_close(db);

cout<

sqlite3_free(errmsg);

return 0;

}

string strSql;

strSql+="begin;\n";

for (int i=0;i<100;i++)

{

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

}

strSql+="commit;";

//cout< <

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

if (nResult != SQLITE_OK)

{

sqlite3_close(db);

cout< <

sqlite3_free(errmsg);

return 0;

}

strSql = "select * from fuck";

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

if (nResult != SQLITE_OK)

{

sqlite3_close(db);

cout< <

sqlite3_free(errmsg);

return 0;

}

sqlite3_close(db);

return 0;

}

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

{

string s;

for(int i=0;i

{

s+=pName[i];

s+=":";

s+=pValue[i];

s+="\n";

}

cout< <

return 0;

}

上一篇:靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的制作

下一篇:Android 異步任務(wù)AsyncTask

熱點(diǎn)文章推薦
華清學(xué)員就業(yè)榜單
高薪學(xué)員經(jīng)驗(yàn)分享
熱點(diǎn)新聞推薦
前臺(tái)專線:010-82525158 企業(yè)培訓(xùn)洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠(yuǎn)見(jiàn)科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5,京公海網(wǎng)安備11010802025203號(hào)

回到頂部