QSqlquery prepare() 和 bindvalue() 不工作?

QSqlquery prepare() and bindvalue() not working?

我有这个管理登录的代码,下面是其中的一小部分:

void Login::on_pushButton_clicked(){
    QString user, password;
    user = ui->username->text();
    password = ui->pass->text();

    QSqlQuery qry;
    qry.prepare("SELECT id, name from users WHERE username = :username AND password = :password");
    qry.bindValue(":username", user);
    qry.bindValue(":password", password);{
    int counter = 0;
    while (qry.next()){
        counter++;
    }
    if(counter==1)
        ui -> statuslabel -> setText("Sign in successful");
    if(counter<1)
        ui -> statuslabel -> setText("Sign in unsuccessful");
    }
}

在给它正确的输入(即正确的密码和用户名)后,它不起作用并继续第二个如果条件说登录不成功。我有一个计数器 int 类型,用于计算与数据库表匹配的用户输入实例的数量。它被初始化为零,这意味着这不是问题所在。关于这里的情况有什么想法吗?

您忘记在使用 qry.next() 访问第一个元素之前调用 qry.exec()。它应该在最后 qry.bindValue().

之后调用

下面是如何在您的代码中完成的示例:

QSqlQuery qry;
qry.prepare("SELECT id, name from users WHERE username = :username AND password = :password");
qry.bindValue(":username", user);
qry.bindValue(":password", password);
qry.exec()
if(!qry.isActive())
{
    ui -> statuslabel -> setText("SQL Statement execution failed");
    return;
}
if(qry.size() > 0)
    ui -> statuslabel -> setText("Sign in successful");
else
    ui -> statuslabel -> setText("Sign in unsuccessful");

注意:您不必使用 QSqlQuery::next 来检查您的 SELECT 语句是否 return 任何结果。 QSqlQuery::size 方法将选择 return 行数。