1. 程式人生 > >QT遇坑警告“parameter count mismatch”

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()來檢索的。 在這裡插入圖片描述

在這裡插入圖片描述 在這裡插入圖片描述