时间:2021-05-19
C++在条件查询时困扰了6个小时的小问题 先说结论1. 贴上运行错误的原码2. 错误分析2.1 sql语句错误2.2 sql语句替换2.3 继续问题分析 3.总结
1:如果由%作为占位符.arg()传参的模式,则sql_query.exec(sql_str)执行查询时,必须加上查询语句。
2:如果由?作为占位符.addBindValue()传参的模式,则sql_query.exec()执行查询时,不可加上查询语句。
结果,Qt Creater报错:参数个数不匹配(“Parameter count mismatch”)。
2.1.1 数据库字段不匹配
我看了数据库结构,表名字段名确认没问题(在Navicat中可进行查询);
?为英文也没问题;
UserId字段为整形,不用加引号的,但死马当活马医试一试。
然后我在?上加单引号,不报错了,但是查询出的记录个数为0。
2.1.2 占位符的问题
分析原因:不带条件查询能查询出来,并且我在Navicat中条件查询将?替换成具体的数值也可以查询出来。
所以问题很可能是出在?占位符上。(这里不再区分?的中英文了,都是英文,为了方便不再切换为英文)
于是询问同学,同学看了也不太清楚,换上同学的%占位符进行语句查询。结果: 查 询 成 功,我的天那!!!
仅将sql语句替换为如下:
为什么我会迷茫:因为我的其它表中也含有类似 where 字段名 = ? 的条件查询语句。
其它表都能运行成功,为什么这个表不行?
首先我怀疑是因为这个表查询的字段不是主键。(我知道是不是主键影响不大,但还是尽可能试一试)
于是我将字段改为主键字段进行查询,错误依旧。
被逼无奈我将两个表的条件查询函数逐字比较,最后发现原来问题出执行查询sql语句的地方。
对比:
条件查询的占位符与查询执行的匹配:
1:如果由%作为占位符.arg()传参的模式,则查询语句执行时需要加上查询语句。(已验证,必须加上)
2:如果由?作为占位符.addBindValue()传参的模式,则查询语句执行时不可以加上查询语句。
示例1:
QSqlQuery sql_query; //数据库查询对象QString select_str = QString( "select * from t_allinput where UserId = '%1'").arg(userId);//%作为占位符.arg()传参sql_query.prepare(select_str); //预处理if(!sql_query.exec(select_str)) //+++++ 必须带查询语句 ++++++++//示例2:
QSqlQuery sql_query; //数据库查询对象QString select_str = "select * from t_allinput where UserId = ?"; //?作为占位符sql_query.prepare(select_str); //预处理sql_query.addBindValue(userId); //.addBindValue()传参if(!sql_query.exec()) //+++++ 不可带查询语句 ++++++++//到此这篇关于记录一个C++在条件查询时遇到的问题。的文章就介绍到这了,更多相关C++条件查询内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
问题描述:在使用laravel的左联接查询的时候遇到一个问题,查询中带了右表一个筛选条件,导致结果没有返回右表为空的记录。先附上代码:DB::table('us
今天遇到一个问题:在做“搜索”功能时,输入查询条件后查询不了。我做的是首页显示数据表package中的内容,但是有个条件,显示在首页的内容还必须是:字段stat
同事在学mybatis时,遇到了一个问题就是,使用char类型字段作为查询条件时一直都查不出数据,其他类型的则可以。使用的数据库是oracle,查询条件字段类型
1.从数据库中先查询符合条件的记录,存放于一个DataTable中,在使用c#等开始遍历这张表,利用DataRow中的主键,再去读取相应的符合条件的多条记录,合
遇到一个需求:假定有一个图片文件,真实的类型为jpg,而有人偷懒把jpg直接复制一张,存为同名的png文件,这样在as3读取文件时不会遇到问题,但手机c++在读