【问题标题】:Qt SQL query.exec Always Returning TrueQt SQL query.exec 总是返回 True
【发布时间】:2014-12-29 14:18:08
【问题描述】:

我正在使用数据库在 qt 中创建登录系统,但是当我在 qt 中运行查询时,它始终返回 true,即使该项目为 false。

sql数据库连接代码如下

QSqlDatabase login = QSqlDatabase::addDatabase("QSQLITE");
login.setDatabaseName("/Users/Daniel/Dropbox/Stock_Control.sqlite");
if(!login.open())
    ui->label->setText("Unable To Connect To Database");

SQL查询代码如下

static Home *home = new Home;
QSqlQuery query;
QString Username = ui->Username_lineEdit->text();
QString Password = ui->Password_lineEdit->text();
if(query.exec("SELECT * FROM Program_account WHERE Login = '"+ Username +"' AND Password = '"+ Password +"' "))
{
    tries = 0;
    home->show();
    close();
}

谢谢

【问题讨论】:

  • 别忘了sql注入。用户名和密码是小事一桩。

标签: c++ sql qt sqlite


【解决方案1】:

QSqlQuery::exec() 在查询执行成功时返回true,即使查询为空。使用QSqlQuery::size()函数检查查询是否为空。

更新

由于QSqlQuery::size() 总是为 sqlite 返回 -1,所以您可以使用 QSqlQuery::first() 代替。

你可以这样做:

if(!query.exec("SELECT Login FROM Program_account WHERE Login = '"+ Username +"' AND Password = '"+ Password +"' "))
{
    // something is terribly wrong
}
else if(!query.first())
{
    // incorrect username or password
}
else
{
    tries = 0;
    home->show();
    close();
}

【讨论】:

  • 错了,因为size()对于SQLite总是返回-1,因为SQLite不支持这个。查看此问题的答案:stackoverflow.com/questions/26495049/…
  • @Chernobyl,感谢您指出这一点,我已修复答案。它现在也应该适用于 sqlite
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-06
  • 2017-05-10
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多