日韩在线免费播放-日韩在线免费av-日韩在线免费-日韩在线毛片-国产高清不卡视频-国产高清不卡

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

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

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

原型:

int sqlite3_open(

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

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

);

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

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

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

原型:

int sqlite3_close(sqlite3 *ppDb);

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

執(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 語句的函數(shù)。

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

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

第3個(gè)參數(shù)sqlite3_callback 是回調(diào),當(dāng)這條語句執(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<

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

exec 的回調(diào)

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

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

//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ù)通過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)鍵值,查出來的數(shù)據(jù)都保存在這里,它實(shí)際上是個(gè)1維數(shù)組(不要以為是2維數(shù)組),

//每一個(gè)元素都是一個(gè)char*值,是一個(gè)字段內(nè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<<"打開數(shù)據(jù)庫失敗:"<

return 0;

}

else

{

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

}

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)庫和動(dòng)態(tài)庫的制作

下一篇: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)見科技集團(tuán)有限公司 版權(quán)所有 ,京ICP備16055225號(hào)-5京公海網(wǎng)安備11010802025203號(hào)

回到頂部

主站蜘蛛池模板: 下一个奇迹| 第一次美国电影| 欧美成熟| 钱月笙| 礼记二则原文和译文| 姐姐的秘密电影| 狼和狗的时间| 赵大勇| 火烈女囚| 解决问题五上数学| 太深了太爽了受不了了| 好看头像动漫| 电影《kiskisan》在线播放| 曹查理电影大全免费观看国语| 上香香灰打卷图解| 纳西三部曲| https://www.douyin.com/pay| 迷宫1意大利劳尔| 电影白夜行| 吻戏韩剧| 康熙微服记四部免费观看在线| 漂亮阿姨 李恩美演的什么电影| 电影白百合| 雀鬼| 全国急招压路机师傅| 践行者| 教育部全国青少年普法网答案| 阴阳界 电影| 小伙捡了一沓钱完整版| 恶行之外电影完整在线观看| 甜蜜宝贝电影| 混的头像| 东方电视台节目表今日节目| 幸福年民乐合奏曲简谱| 仲裁申请书模板及范文| 陷入纯情| 黄姓的研究报告| 婴儿什么时候添加辅食最好| 永远的日本电影| 桥梁工程施工方案| 普通日记200字可抄|