我正在使用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");
}
}
答案 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子句以及编写查询时如何表示字符串将是有益的: