来自DELETE语句的sqlite3的奇怪错误

时间:2014-04-16 21:53:51

标签: qt sqlite

我遇到了一个恼人的问题。 qt中的代码无法正常工作,没有语法和运行时错误,只有sqlite3不喜欢我的查询。

此功能会删除用户在个人资料窗口中单击按钮时选择的朋友或朋友。

bool Profilewindow::removeFriends() {
QList<QListWidgetItem *> selectedFriends = ui -> userfriendsList -> selectedItems();
QSqlQuery query;
QStringList stringlist;

if ( MainWindow::getInstance() -> isConnectedToDB() ) {
        query.prepare("DELETE FROM user_friends WHERE user_id = :user_id AND f_fname = :f_fname AND f_lname = :f_lname");
    for ( int i = 0; i < selectedFriends.count(); ++i ) {

        stringlist = selectedFriends.at(i) -> text().split(" ");

        qDebug() << this -> user_id;
        query.bindValue(":user_id", this->user_id);

        qDebug() << stringlist.at(0);
        query.bindValue(":f_fname", stringlist.at(0));

        qDebug() << stringlist.at(1);
        query.bindValue(":f_lname", stringlist.at(1));

        if ( !query.exec() ) {
            qDebug() << query.lastError().text();
        }

    }
    MainWindow::getInstance() -> closeDBConnection();
    if ( this -> updateFriendsList() ) return true;
    return false;
}

return false;

}

正确收到绑定的所有参数,它们不是null或空字符串或任何其他wroung数据。

执行查询时qDebug输出: &#34;参数计数不匹配&#34;

无法理解这个奇怪的错误意味着什么?

1 个答案:

答案 0 :(得分:0)

有时我会这样简单地进行查询:

QString querytext = QString("DELETE FROM user_friends WHERE user_id = '%1' AND f_fname = '%2' AND f_lname = '%3'")
    .arg(this->user_id)
    .arg(stringlist.at(0))
    .arg(stringlist.at(1));

qDebug() << querytext; // what is really sent do database engine?

query.exec(querytext);

QSqlQuery :: prepare()方法的主要优点是它确实准备了数据库引擎中的执行计划,因此无法一次又一次地准备计划。如果重复执行,运行速度会快得多,请参阅:

In SQLite, do prepared statements really improve performance?