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

記錄一個C++在條件查詢時遇到的問題(推薦)

 更新時間:2021年01月22日 15:12:19   作者:小鎮(zhèn)拾光  
這篇文章主要介紹了記錄一個C++在條件查詢時遇到的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

C++在條件查詢時困擾了6個小時的小問題 先說結(jié)論1. 貼上運行錯誤的原碼2. 錯誤分析2.1 sql語句錯誤2.2 sql語句替換2.3 繼續(xù)問題分析 3.總結(jié)

先說結(jié)論

1:如果由%作為占位符.arg()傳參的模式,則sql_query.exec(sql_str)執(zhí)行查詢時,必須加上查詢語句。
2:如果由?作為占位符.addBindValue()傳參的模式,則sql_query.exec()執(zhí)行查詢時,不可加上查詢語句。

1. 貼上運行錯誤的原碼

int InputManage::queryInputsByUserId(int userId,map<uint,Model_AllInPut> &AInputMap){
 if(!db.openDB()){
  db.openDB();
 }
 qDebug()<<"用戶ID為::::"<<userId;	//打印正確為1
 QSqlQuery sql_query;				//數(shù)據(jù)庫查詢對象
 QString select_str = "select * from t_allinput where UserId = ?";//條件查詢語句,將?改為1放到Navicat中可查詢出結(jié)果
 sql_query.prepare(select_str);		//預(yù)處理
 sql_query.addBindValue(userId); 	//根據(jù)傳入的id去查詢記錄
 if(!sql_query.exec(select_str)) 	//執(zhí)行查詢sql語句
 {
  qDebug()<<sql_query.lastError();
 }
 else
 {
  while(sql_query.next()) //遍歷結(jié)果
  {
   Model_AllInPut AInput;
   AInput.setAllInPutId(sql_query.value(0).toUInt()); //根據(jù)index遍歷
   uint Id = AInput.AllInPutId();
   AInput.setConcrete_compressive_grade(sql_query.value(1).toString());
			//... 省略中間字段 ...
   AInput.setUserId(sql_query.value(19).toUInt());
   AInputMap[Id]= AInput;        //將鍵值對放入map中
  }
  db.closeDB();
  return AInputMap.size();
 }
 db.closeDB();
 return 0;
}

結(jié)果,Qt Creater報錯:參數(shù)個數(shù)不匹配(“Parameter count mismatch”)。

2. 錯誤分析

2.1 sql語句錯誤

2.1.1 數(shù)據(jù)庫字段不匹配

我看了數(shù)據(jù)庫結(jié)構(gòu),表名字段名確認(rèn)沒問題(在Navicat中可進(jìn)行查詢);
?為英文也沒問題;
UserId字段為整形,不用加引號的,但死馬當(dāng)活馬醫(yī)試一試。
然后我在?上加單引號,不報錯了,但是查詢出的記錄個數(shù)為0。

2.1.2 占位符的問題

分析原因:不帶條件查詢能查詢出來,并且我在Navicat中條件查詢將?替換成具體的數(shù)值也可以查詢出來。
所以問題很可能是出在?占位符上。(這里不再區(qū)分?的中英文了,都是英文,為了方便不再切換為英文)

2.2 sql語句替換

于是詢問同學(xué),同學(xué)看了也不太清楚,換上同學(xué)的%占位符進(jìn)行語句查詢。結(jié)果: 查 詢 成 功,我的天那!??!
僅將sql語句替換為如下:

QString select_str = QString( "select * from t_allinput where UserId = '%1'").arg(userId);//條件查詢語句,

2.3 繼續(xù)問題分析

為什么我會迷茫:因為我的其它表中也含有類似 where 字段名 = ? 的條件查詢語句。
其它表都能運行成功,為什么這個表不行?
首先我懷疑是因為這個表查詢的字段不是主鍵。(我知道是不是主鍵影響不大,但還是盡可能試一試)
于是我將字段改為主鍵字段進(jìn)行查詢,錯誤依舊。
被逼無奈我將兩個表的條件查詢函數(shù)逐字比較,最后發(fā)現(xiàn)原來問題出執(zhí)行查詢sql語句的地方。
對比:

if(!sql_query.exec(select_str)) 	//執(zhí)行查詢sql語句
	if(!sql_query.exec()) 				//執(zhí)行查詢sql語句

3.總結(jié)

條件查詢的占位符與查詢執(zhí)行的匹配:

1:如果由%作為占位符.arg()傳參的模式,則查詢語句執(zhí)行時需要加上查詢語句。(已驗證,必須加上)
2:如果由?作為占位符.addBindValue()傳參的模式,則查詢語句執(zhí)行時不可以加上查詢語句。

示例1:

QSqlQuery sql_query;										//數(shù)據(jù)庫查詢對象
QString select_str = QString( "select * from t_allinput where UserId = '%1'").arg(userId);//%作為占位符.arg()傳參
sql_query.prepare(select_str);								//預(yù)處理
if(!sql_query.exec(select_str)) 							//+++++ 必須帶查詢語句 ++++++++//

示例2:

QSqlQuery sql_query;												//數(shù)據(jù)庫查詢對象
QString select_str = "select * from t_allinput where UserId = ?";	//?作為占位符
sql_query.prepare(select_str);										//預(yù)處理
sql_query.addBindValue(userId); 									//.addBindValue()傳參
if(!sql_query.exec()) 												//+++++ 不可帶查詢語句 ++++++++//

到此這篇關(guān)于記錄一個C++在條件查詢時遇到的問題。的文章就介紹到這了,更多相關(guān)C++條件查詢內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關(guān)文章

  • 關(guān)于統(tǒng)計數(shù)字問題的算法

    關(guān)于統(tǒng)計數(shù)字問題的算法

    本文介紹了統(tǒng)計數(shù)字問題的算法,計算出書的全部頁碼中分別用到多少次數(shù)字0,1,2,3,.....9,并有每一步的解題思路,需要的朋友可以參考下
    2015-08-08
  • C++ 中CListCtrl的每個項都顯示不同的提示信息

    C++ 中CListCtrl的每個項都顯示不同的提示信息

    這篇文章主要介紹了C++ 中CListCtrl的每個項都顯示不同的提示信息的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下
    2017-09-09
  • typedef和#define的用法以及區(qū)別

    typedef和#define的用法以及區(qū)別

    以下是對C/C++語言中,typedef和#define的用法以及區(qū)別進(jìn)行了詳細(xì)的介紹,需要的朋友可以過來參考下
    2013-10-10
  • C++關(guān)鍵字const使用方法詳解

    C++關(guān)鍵字const使用方法詳解

    C語言中的const與C++有很大的不同,在C語言中用const修飾的變量仍是一個變量,表示這個變量是只讀的,不可顯示地更改,C++中的const關(guān)鍵字的用法非常靈活,而使用const將大大改善程序的健壯性,const關(guān)鍵字是一種修飾符
    2022-12-12
  • C語言中%c與%s的區(qū)別與劃分詳解

    C語言中%c與%s的區(qū)別與劃分詳解

    這篇文章主要介紹了C語言中%c與%s的區(qū)別與劃分詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • C++中的不規(guī)則二維數(shù)組實現(xiàn)代碼

    C++中的不規(guī)則二維數(shù)組實現(xiàn)代碼

    本文介紹了一個在C++中保存不定長二維數(shù)組的數(shù)據(jù)結(jié)構(gòu),在這個結(jié)構(gòu)中,我們使用了一個含有指針和數(shù)組長度的結(jié)構(gòu)體,用這樣的一個結(jié)構(gòu)體構(gòu)造一個結(jié)構(gòu)體數(shù)組,用于存儲每一個不定長的數(shù)組,感興趣的朋友一起看看吧
    2024-03-03
  • C語言中使用lex統(tǒng)計文本文件字符數(shù)

    C語言中使用lex統(tǒng)計文本文件字符數(shù)

    這篇文章主要介紹了C語言中使用lex統(tǒng)計文本文件字符數(shù),本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
    2015-04-04
  • C語言實現(xiàn)快速排序

    C語言實現(xiàn)快速排序

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)快速排序算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • C語言實現(xiàn)飛機(jī)游戲(2)

    C語言實現(xiàn)飛機(jī)游戲(2)

    這篇文章主要介紹了C語言實現(xiàn)飛機(jī)游戲的第二部分,進(jìn)行功能完善,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 解析C語言中空指針、空指針常量、NULL & 0的詳解

    解析C語言中空指針、空指針常量、NULL & 0的詳解

    本篇文章是對C語言中空指針、空指針常量、NULL & 0 進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評論

绿春县| 闸北区| 鹿泉市| 汪清县| 吴川市| 南通市| 潍坊市| 石城县| 山东省| 无棣县| 隆子县| 改则县| 布尔津县| 鄂托克旗| 平乡县| 樟树市| 延庆县| 刚察县| 内黄县| 祁连县| 大悟县| 柳江县| 岳阳县| 阜新市| 兴义市| 玉田县| 云梦县| 堆龙德庆县| 太和县| 永和县| 巴南区| 郴州市| 长阳| 五家渠市| 瑞昌市| 岚皋县| 远安县| 三河市| 霍林郭勒市| 宾阳县| 浦北县|