最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++獲取sqlite3數(shù)據(jù)庫(kù)表中所有字段的方法小結(jié)

 更新時(shí)間:2016年11月28日 15:31:56   作者:BattleScars  
本文給大家分享c++獲取sqlite3數(shù)據(jù)庫(kù)表中所有字段的三種常用方法,本文針對(duì)每一種方法給大家詳細(xì)介紹,需要的的朋友通過(guò)本文一起學(xué)習(xí)吧

常用方法:

1.使用sqlite3_get_table函數(shù)

2.獲取sqlite創(chuàng)建表的sql語(yǔ)句字符串,然后進(jìn)行解析獲取到相應(yīng)的字段

3.采用配置文件的方式,將所有字段名寫(xiě)入配置文件

下面針對(duì)這三個(gè)方法給大家逐一詳細(xì)介紹。

方法1:使用sqlite3_get_table函數(shù)

代碼:

char *dbname = “test.db”;
int rc = sqlite3_open(dbname, &db);
if (rc == SQLITE_OK)
{
char sql[256] = “select * from Images” ;
char** pResult;
int nRow;
int nCol;
rc = sqlite3_get_table(db, sql, &pResult, &nRow, &nCol, NULL);
if (rc == SQLITE_OK)
{
if (nRow >= 1){
...
}
}
sqlite3_free_table(pResult);
}
sqlite3_close(db);

分析:

nRow返回的是查詢(xún)到的記錄的行數(shù)(不包括字段名那一行),nCol返回的記錄的列數(shù),通過(guò)pResult可以訪問(wèn)所有返回的數(shù)據(jù)包括所有的字段名。如下圖:

nRow=7,nCol=6,則pResult[0-5]返回的為當(dāng)前這張表的字段名,每個(gè)字段名都是一個(gè)字符串?dāng)?shù)組。

該方法缺點(diǎn):如果當(dāng)前表中不存在記錄時(shí),將無(wú)法訪問(wèn)pResult[0 - nCol-1],這樣就無(wú)法獲取到表中字段。實(shí)際應(yīng)用中經(jīng)常需要在程序剛啟動(dòng)時(shí)就一次性先獲取表中所有的字段名以便之后的插入刪除更新等操作,所以該方法實(shí)用性不強(qiáng)。

方法2:獲取sqlite創(chuàng)建表的sql語(yǔ)句字符串

過(guò)程分析:sqlite3在創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)以及對(duì)應(yīng)的表之后會(huì)自動(dòng)生成一個(gè)table,該table格式如下:

其中字段sql為創(chuàng)建表的create語(yǔ)句,通過(guò)sqlite3_get_table可以獲取到指定表的create sql 語(yǔ)句,然后解析字符串就可以得到指定表中所有字段名。

代碼:

//獲取上圖Figures表中create sql語(yǔ)句
string DB_GetFigureCreateSql()
{
string res = "";
int rc = sqlite3_open(dbname, &db);
if (rc == SQLITE_OK)
{
char *sql = "select sql from sqlite_master where tbl_name = 'Figures' and type = 'table'";
char** pResult;
int nRow;
int nCol;
rc = sqlite3_get_table(db, sql, &pResult, &nRow, &nCol, NULL);
if (rc == SQLITE_OK)
{
if (nRow >= 1)
{
res = pResult[nCol];
}
}
sqlite3_free_table(pResult);
}
sqlite3_close(db);
return res;
}
//解析字符串函數(shù)
std::vector<string> split(string str, string separator)
{
std::vector<string> result;
int cutAt;
while ((cutAt = str.find_first_of(separator)) != str.npos)
{
if (cutAt > 0)
{
result.push_back(str.substr(0, cutAt));
}
str = str.substr(cutAt + 1);
}
if (str.length() > 0)
{
result.push_back(str);
}
return result;
}
//獲取表中字段名
std::vector<string> DB_GetKeyFieldName(string res)
{
std::vector<string> r = split(res, ",");
std::vector<string> keyField;
for (int i = 0; i < r.size(); ++i)
{
std::vector<string> tp = split(r[i], "\"");
if (tp.size() == 2)
{
keyField.push_back(tp[0]);
}
else if (tp.size() == 3)
{
keyField.push_back(tp[1]);
}
}
return keyField;
}

使用方法

std::vector<string> FieldName = DB_GetKeyFieldName(DB_GetFigureCreateSql());

結(jié)果分析:如果表中隨時(shí)有可能添加新的字段,添加字段的sql語(yǔ)句,如下:

ALTER TABLE x ADD COLUMN "new_col",

其中new_col為字段名,雙引號(hào)必須加上,因?yàn)樯厦娼馕龅倪^(guò)程以雙引號(hào)“ \””為分隔字符。(注意:sql語(yǔ)句中加雙引號(hào),單引號(hào)或者不加引號(hào)都可以成功的向指定表中添加字段)

方法3:采用配置文件的方式,將所有字段名寫(xiě)入配置文件

對(duì)于某些具體復(fù)雜的應(yīng)用場(chǎng)景,可以采用配置文件的方式將所有字段名寫(xiě)入對(duì)應(yīng)的配置文件中,每次進(jìn)入應(yīng)用程序時(shí)讀取配置文件即可。另外如果某些字段有指定中可選的值,也可以將這些可選值也寫(xiě)入配置文件中。本人自己用的不規(guī)范的配置文件寫(xiě)法就不分享了,近期好好研究配置

文件的規(guī)范寫(xiě)法。

以上所述是小編給大家介紹的c++獲取sqlite3數(shù)據(jù)庫(kù)表中所有字段的方法小結(jié),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 快速解決boost庫(kù)鏈接出錯(cuò)的問(wèn)題(分享)

    快速解決boost庫(kù)鏈接出錯(cuò)的問(wèn)題(分享)

    下面小編就為大家?guī)?lái)一篇快速解決boost庫(kù)鏈接出錯(cuò)的問(wèn)題(分享)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • 詳解C++純虛函數(shù)與抽象類(lèi)

    詳解C++純虛函數(shù)與抽象類(lèi)

    這篇文章主要介紹了C++純虛函數(shù)與抽象類(lèi)的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • 深度解析三個(gè)常見(jiàn)的C語(yǔ)言?xún)?nèi)存函數(shù)

    深度解析三個(gè)常見(jiàn)的C語(yǔ)言?xún)?nèi)存函數(shù)

    這篇文章主要深度解析了三個(gè)常見(jiàn)的C語(yǔ)言?xún)?nèi)存函數(shù)memcpy,memmove,memcmp,所以本文將對(duì)memcpy,memmove,memcmp 三個(gè)函數(shù)進(jìn)行詳解和模擬實(shí)現(xiàn),需要的朋友可以參考下
    2023-07-07
  • C語(yǔ)言冒泡排序超全面實(shí)現(xiàn)流程

    C語(yǔ)言冒泡排序超全面實(shí)現(xiàn)流程

    算法中排序是十分重要的,而每一個(gè)學(xué)習(xí)計(jì)算機(jī)的都會(huì)在初期的時(shí)候接觸到這種排序,下面這篇文章主要給大家介紹了關(guān)于c語(yǔ)言冒泡排序的相關(guān)資料,需要的朋友可以參考下
    2023-01-01
  • C語(yǔ)言實(shí)現(xiàn)魔方陣算法(幻方陣 奇魔方 單偶魔方實(shí)現(xiàn))

    C語(yǔ)言實(shí)現(xiàn)魔方陣算法(幻方陣 奇魔方 單偶魔方實(shí)現(xiàn))

    魔方陣是指由1,2,3……n2填充的,每一行、每一列、對(duì)角線(xiàn)之和均相等的方陣,階數(shù)n = 3,4,5…。魔方陣也稱(chēng)為幻方陣,看下面的實(shí)現(xiàn)方法吧
    2013-11-11
  • C++ STL入門(mén)教程(7) multimap、multiset的使用

    C++ STL入門(mén)教程(7) multimap、multiset的使用

    這篇文章主要介紹了C++ STL入門(mén)教程第七篇,multimap一對(duì)多索引,multiset多元集合的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • C++多態(tài)的全面講解

    C++多態(tài)的全面講解

    多態(tài)按字面的意思就是多種形態(tài)。當(dāng)類(lèi)之間存在層次結(jié)構(gòu),并且類(lèi)之間是通過(guò)繼承關(guān)聯(lián)時(shí),就會(huì)用到多態(tài)。C++?多態(tài)意味著調(diào)用成員函數(shù)時(shí),會(huì)根據(jù)調(diào)用函數(shù)的對(duì)象的類(lèi)型來(lái)執(zhí)行不同的函數(shù)
    2022-06-06
  • QT實(shí)現(xiàn)定時(shí)關(guān)閉消息提示框

    QT實(shí)現(xiàn)定時(shí)關(guān)閉消息提示框

    這篇文章主要介紹了軟件利用Qt簡(jiǎn)單實(shí)現(xiàn)消息提示框可定時(shí)自動(dòng)關(guān)閉,文中的示例代碼講解詳細(xì),對(duì)我們;了解QT有一定的幫助,感興趣的可以學(xué)習(xí)一下
    2022-01-01
  • 如何判斷一個(gè)數(shù)是否為4的冪次方?若是,并判斷出來(lái)是多少次方?

    如何判斷一個(gè)數(shù)是否為4的冪次方?若是,并判斷出來(lái)是多少次方?

    本篇文章是對(duì)如何判斷一個(gè)數(shù)是否為4的冪次方?若是,并判斷出來(lái)是多少次方的實(shí)現(xiàn)方法,進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++提取文件名與提取XML文件的方法詳解

    C++提取文件名與提取XML文件的方法詳解

    這篇文章主要為大家詳細(xì)介紹了C++提取文件名與提取XML文件的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助<BR>
    2022-03-03

最新評(píng)論

定远县| 米泉市| 临安市| 安乡县| 响水县| 麟游县| 石屏县| 大邑县| 伊春市| 延寿县| 车险| 淮滨县| 廊坊市| 永年县| 布尔津县| 华亭县| 兴宁市| 韩城市| 甘孜| 齐齐哈尔市| 西充县| 南华县| 蒙自县| 都兰县| 扎囊县| 忻城县| 绥宁县| 东兰县| 靖江市| 象山县| 游戏| 红原县| 丰县| 安国市| 天门市| 林西县| 安顺市| 浦东新区| 中卫市| 旌德县| 北碚区|