QT遇坑警告“parameter count mismatch”

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()来检索的。
QT遇坑警告“parameter count mismatch”_第1张图片
QT遇坑警告“parameter count mismatch”_第2张图片
QT遇坑警告“parameter count mismatch”_第3张图片

你可能感兴趣的:(Q'T)