Qt使用数据库检查登录

时间:2019-07-04 00:26:09

标签: mysql sql database qt

我正在使用qt创建用户登录名。我使用Sqlite作为数据库,由于某种原因卡住,无法正常工作。仅当在数据库中输入第一行时,我才能完全绕过登录屏幕。任何其他用户都无法登录(数据库中的第2、3、4 ...行)。在过去的几天里,我一直在阅读各种文章,并且没有找到适当的解决方案。这是我的代码。我还尝试过通过QSqlQuery创建查询并将其传递到根本无法使用的QSQlQueryModel对象。

void MainWindow::on_login_clicked()
{
    QSqlDatabase m_db;
    QString path = "C:/Users/annea/Summer2019Database.db";
    m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName(path);
    m_db.open();

    if (!m_db.open())
    {
       qDebug() << "Error: connection with database fail";
    }
    else
    {
       qDebug() << "Database: connection ok";
    }

    QString username = ui->username->text();
    QString password = ui->password->text();

    QSqlQueryModel *queryModel = new QSqlQueryModel; 
    queryModel->setQuery("SELECT * FROM [User Database] WHERE Username= username"); //select the row of where the Username == username
    queryModel->query().exec(); //execute it (not really sure why or what this does
    if(queryModel->record(0).value(1).toString()== password) //if a row is found check column 2 for password
    {
        destroy(); //destroy current window
        if(queryModel->record(0).value(3).toString()== 1) //if id is equal to one log in as user
        {
            user.showMaximized();
        }
        else {
            dbManager.showMaximized();
        }
    }
    else {

        qWarning("Wrong Password or Username");
    }
}

1 个答案:

答案 0 :(得分:0)

我认为您的查询是错误的。而不是像这样写:

queryModel->setQuery("SELECT * FROM [User Database] WHERE Username= username"); //select the row of where the Username == username

您可能想这样写:

queryModel->setQuery(QString("SELECT * FROM [User Database] WHERE Username = '%1'").arg(username)); //select the row of where the Username == username

为什么?因为您正在编写查询,并且可能要检查输入的用户名,而不是字符串“ username”。另外,比较时请不要忘记撇号。

为了找到更多可能有助于解决问题的信息,您应该阅读有关Qt类的文档。此外,查看SQLite WHERE子句以及编写查询时如何表示字符串将是有益的:

  1. https://doc.qt.io/qt-5/qsqlquerymodel.html#setQuery
  2. https://doc.qt.io/qt-5/qsqlquery.html#QSqlQuery-1
  3. http://www.sqlitetutorial.net/sqlite-where/
  4. https://www.sqlite.org/datatype3.html