Qt SQLITE 查询 QVariant 无效
Posted
技术标签:
【中文标题】Qt SQLITE 查询 QVariant 无效【英文标题】:Qt SQLITE Query QVariant Invalid 【发布时间】:2014-12-30 19:42:44 【问题描述】:我正在从 2 个 lineedit 小部件中读取文本值,并使用这些小部件中的数据作为登录系统,但我无法,因为程序当前仅检查用户名是否在 SQLITE 数据库中,我'我不知道为什么。
我的连接是从
完成的QSqlDatabase login = QSqlDatabase::addDatabase("QSQLITE");
login.setDatabaseName("/Users/Daniel/Dropbox/Stock_Control.sqlite");
if(!login.open())
ui->label->setText("Unable To Connect To Database");
我的登录代码如下
static Home *home = new Home;
QSqlQuery query;
QString Username = ui->Username_lineEdit->text();
QString Password = ui->Password_lineEdit->text();
query.prepare("SELECT Login, Password FROM Program_account WHERE Login = '"+ Username +"' AND Password = '"+ Password +"'");
if(!query.exec())
qDebug() << "SQL QUERY Login:" << query.executedQuery();
qDebug() << "SQL ERROR Login:" << query.lastError();
else if(!query.first())
qDebug() << "SQL QUERY Login:" << query.executedQuery();
qDebug() << query.value(1);
qDebug() << "SQL ERROR Login:" << query.lastError();
tries++;
int x = 10 - tries;
ui->label->setText("Incorrect Username or Password " + QString::number(x) + " tries until timeout");
else
qDebug() << "SQL QUERY Login:" << query.executedQuery();
qDebug() << query.value(1);
qDebug() << query.last();
qDebug() << "SQL ERROR Login:" << query.lastError();
tries = 0;
home->show();
close();
当 query.value(1) 运行时,输出是 QVariant(Invalid),我猜这是我的问题的根源,但我不知道为什么不解决它。
谢谢
【问题讨论】:
我在上述代码中的任何地方都没有看到query.value(1)
调用。你能详细说明一下吗?
我是我在测试时必须更改它,但 query.value(0) 给了我数据库 Program_account 中登录字段的值,但 query.value(1) 返回 QVariant (无效)我猜这就是为什么程序允许来自 Password QLineEdit 的任何密码,但只允许数据库中的用户名。
请注意,像您一样填写您的查询,您会受到 SQL 注入(使用登录“myLogin OR 1=1;”进行测试)。使用 query.bindValue() 或 .addBindValue() 会好很多。另外,我不知道 qDebug 如何打印 QVariant 对象,但我建议您只显式转换您的数据:query.value(0).toString()。
【参考方案1】:
通过查看上面的代码,我敢打赌 QSqlQuery 对象没有被正确初始化,因此没有成功执行语句。
您必须在创建 QSQlQuery 时将连接传递给它或手动设置它,如下所示:
QSqlQuery query(login);
由于这永远不会被设置,因此您对任何内容都执行查询并且它会失败。在这种情况下,QSQlQuery 对象上的错误消息并不理想。
【讨论】:
以上是关于Qt SQLITE 查询 QVariant 无效的主要内容,如果未能解决你的问题,请参考以下文章
请教QDatastream与QVariant的相关问题(QT编程)