博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
QT遇坑警告“parameter count mismatch”
阅读量:2355 次
发布时间:2019-05-10

本文共 1221 字,大约阅读时间需要 4 分钟。

1.从数据库sqlite查询parameter count mismatch 错误衍生的故事

写了一个数据库创建时是这样写的:

QSqlQuery query;//判断表是否已经存在	QString sql = QString("select * from sqlite_master where name='%1'").arg("goods");	if(query.exec(sql))	  return true;	if (!query.exec("CREATE TABLE goods("	              "id INT,"	              "name VARCHAR,"	              "number INT)")) {	  QMessageBox::critical(0, QObject::tr("Database Error"),	                        query.lastError().text());	  return false;}

乍一看没什么毛病,执行插入语句时是这样写的(其中id_in,name_in,number_in分别是int, Qstring, int类型):

query.prepare("insert into goods(id, name, number) values(:id_in,:name_in,:number_in)");query.bindValue(":id_in",id_in);query.bindValue(":name_in",name_in);query.bindValue(":number_in", number_in);if(!query.exec()){    QMessageBox::critical(0, QObject::tr("Database Error"),                          query.lastError().text());    return false;}

看似没什么毛病,但是插入的时候就会报“parameter count mismatch”错误,这是为什么呢?

然后我将编译的那个目录删掉,多运行了几次程序,发现这个错误导致直接无法插入,但是格式类型是正确的,所以我就思考是不是建表的时候出错了,然后我又把这些语句拿到PostgreeSQL中去试,发现没错啊,然后就盯上检查goods表是否存在的那条语句了。我把这条语句删了,把已经编译好的那个目录也删了,然后运行程序,正常了。好吧就是这里错了。最后错误是query.exec()这句返回的是语句是否正常运行。而要判断表是否存在需要query.next().通过查阅官方文档,发现exec()只要你的语法是正确的,可以正常执行那就返回true。而真正的查询结果是是通过next()来检索的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

转载地址:http://vrftb.baihongyu.com/

你可能感兴趣的文章
c中嵌入python
查看>>
SPSS基础教程:SPSS统计分析基础
查看>>
ICMP协议
查看>>
SSL协议
查看>>
IMAP,POP3,SMTP协议
查看>>
单例模式(java)详细
查看>>
java线程中信号量Semaphore类的应用
查看>>
如何设置CentOS为中文显示
查看>>
FrameLayout之我见
查看>>
个人解读Activity之一
查看>>
实现自定义布局的Notification
查看>>
AlarmManager的学习与实现
查看>>
解读Content Provider之一
查看>>
解读Content Provider之二
查看>>
S3C6410 存储器映射
查看>>
Linux 3.3.0移植到S3C6410开发板上之一
查看>>
Busybox支持中文的解决办法
查看>>
Spring中BeanFactory和FactoryBean有什么区别?
查看>>
牛年(2021)的KPI
查看>>
快速识别图片类型
查看>>