<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SQLite3使用筆記(2)——插入

      1. 論述

      如同上一篇文章SQLite3使用筆記(1)——查詢所述,使用SQLite進(jìn)行查詢操作同樣有兩種方式。對(duì)于比較簡(jiǎn)單的表格插入,使用sqlite3_exec()接口就可以了:

        string strSql = "";
        strSql += "insert into user(name,age)";
        strSql += "values('";
        strSql += sName;
        strSql += "',";
        strSql += sAge;
        strSql += ");";
      
        char* cErrMsg;
        int nRes = sqlite3_exec(pDB, strSql.c_str(), 0, 0, &cErrMsg);
        if (nRes != SQLITE_OK) {
          cout << "add user fail: " << cErrMsg << endl;
          return false;
        } else {
          cout << "add user success: " << sName.c_str() << "\t" << sAge.c_str()
               << endl;
        }
      
        sqlite3_free(cErrMsg);
      

      但是對(duì)于一些比較復(fù)雜的情況,比如插入一個(gè)BLOB類型的數(shù)據(jù),更加推薦使用編譯statement,然后傳遞參數(shù)的辦法:

      	sqlite3_stmt *stmt = nullptr;
      
      	char sqlStr[256] = { 0 };
      	sprintf(sqlStr, "insert into tiles(zoom_level, tile_column, tile_row, tile_data) "
      		"values(%d, %d, %d, ?)", zi, xi, yi);
      
      	int rc = sqlite3_prepare_v2(pDB, sqlStr, -1, &stmt, NULL);
      	if (rc != SQLITE_OK) 
      	{
      		cerr << "prepare failed: " << sqlite3_errmsg(pDB) << endl;
      		return;
      	}
      	else 
      	{
      		// SQLITE_STATIC because the statement is finalized
      		// before the buffer is freed:
      		rc = sqlite3_bind_blob(stmt, 1, buffer, size, SQLITE_STATIC);
      		if (rc != SQLITE_OK) 
      		{
      			cerr << "bind failed: " << sqlite3_errmsg(pDB) << endl;
      		}
      		else 
      		{
      			rc = sqlite3_step(stmt);
      			if (rc != SQLITE_DONE)
      			{
      				cerr << "execution failed: " << sqlite3_errmsg(pDB) << endl;
      			}				
      		}
      	}
      
      	sqlite3_finalize(stmt); 
      

      sqlite3_prepare_v2()編譯的sql語(yǔ)句中的?代表一個(gè)參數(shù),通過(guò)sqlite3_bind_blob()進(jìn)行綁定。sqlite3_bind_X也是一系列的函數(shù),blob表示綁定的是一個(gè)二進(jìn)制流,這個(gè)二進(jìn)制buffer最終通過(guò)執(zhí)行sqlite3_step()后插入到數(shù)據(jù)庫(kù)中。由于插入操作只有一次,所以第一次就會(huì)返回SQLITE_DONE,不用像查詢操作那樣迭代遍歷。

      2. 總結(jié)

      無(wú)論查詢和插入,都可以使用sqlite3_exec()這樣的簡(jiǎn)易接口,或者使用編譯statement然后執(zhí)行兩種方式。個(gè)人感覺(jué)非常像JDBC中Statement和Preparement,一種是直接拼接執(zhí)行,一種是預(yù)編譯后傳參執(zhí)行。當(dāng)然更加推薦使用編譯后執(zhí)行傳參的方式,效率高,控制度更細(xì)一點(diǎn),能預(yù)防SQL注入。

      posted @ 2022-05-22 20:50  charlee44  閱讀(753)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 国产av综合色高清自拍| 日韩中文字幕国产精品| 日日碰狠狠添天天爽五月婷| 性色欲情网站iwww九文堂| 精品久久久久久无码人妻蜜桃| 国产精品亚洲片在线观看麻豆| 亚洲中文字幕一区精品自| 最近中文字幕完整版2019| 乱中年女人伦av三区| 人妻系列无码专区久久五月天| 精品一二三四区在线观看| gogo无码大胆啪啪艺术| 国内少妇偷人精品免费| 人禽无码视频在线观看| 成人午夜免费无码视频在线观看| 国产精品久久久久鬼色| 久久久av波多野一区二区| 一区二区福利在线视频| 伊人久久大香线蕉网av| 久久综合综合久久综合| 97精品久久久大香线焦| 亚洲色一区二区三区四区| 老司机精品成人无码AV| 大理市| 国产精品免费观看色悠悠| 无码免费大香伊蕉在人线国产| 国产福利高颜值在线观看| 亚洲精品一区二区18禁| 国产精品无码免费播放| 99re6这里有精品热视频| 惠州市| 国产成人亚洲综合图区| 国产无遮挡又黄又爽不要vip软件| 激情人妻中出中文字幕一区| 成人午夜在线观看刺激| 精精国产xxxx视频在线| 女同性恋一区二区三区视频| 国产成人人综合亚洲欧美丁香花| 2021国产精品视频网站| 亚洲av成人区国产精品| 免费看视频的网站|