QT query.exec() 总是返回 false

Posted

技术标签:

【中文标题】QT query.exec() 总是返回 false【英文标题】:QT query.exec() returns always false 【发布时间】:2015-02-02 11:37:03 【问题描述】:

我正在尝试在 QT 中制作一个简单的登录表单,但我想我做错了什么。我看了一些教程,在不同的论坛上搜索,我找不到任何解决方案。

数据库声明如下:

#include <QMainWindow>
#include <QTSql>
#include <QtDebug>
#include <QFileinfo>

QSqlDatabase sqldb;
sqldb=QSqlDatabase::addDatabase("QSQLITE");
sqldb.setDatabaseName("data.db");

就这样开始了:

 if(sqldb.open())
    ui->label->setText("Conectat!");
else
    ui->label->setText("Nu m-am conectat!");

看起来在我的代码中,query.exec() 只返回 false。

void MainWindow::on_pushButton_clicked()

user=ui->lineEdit->text();
qDebug()<<user;
if(!sqldb.isOpen())
    qDebug()<<"Not connected to db";
    return;


QSqlQuery qry;

if(qry.exec("select * from users where name='"+user+"'"))

    int count=0;
    while(qry.next())
        count++;
    
    if(count==1)
        ui->label_3->setText("correct");
    if(count<1)
        ui->label_3->setText("not correct");
    if(count>1)
        ui->label_3->setText("duplicate");

else qDebug()<<"not working!";

如果我将 if 条件更改为 !qry.exec(...) 我总是会收到“不正确”的消息。 有什么想法吗?

【问题讨论】:

如何添加数据库连接和打开?提供该部分的代码。 @Nejat,我编辑了问题。 sqldb.isOpen() 是否返回 true? "select * from users where name='"+user+"'" ==> SQL Injection!!! @Nejat,问题解决了。看起来我为我的数据库提供了错误的路径 xD 【参考方案1】:

通常可以使用QSqlQuery的lastError()方法找出问题所在:

if( !query.exec(...) )

    qDebug() << query.lastError().text();

【讨论】:

它说:“没有这样的表:用户无法执行语句”,但是在 SQLite 管理器中我可以看到我有一个名为 users 的表,并且在 sqlite3 中使用时查询也可以正常工作。跨度> 没关系,看起来我为我的数据库提供了错误的路径。非常感谢。

以上是关于QT query.exec() 总是返回 false的主要内容,如果未能解决你的问题,请参考以下文章

在QT中用 QSqlQuery query;查询, 第一次 query.exec();结果是对的,可是第二次执行的时候读的数据是错的

"[[FBSDKAccessToken currentAccessToken] hasGranted:@"publish_actions"]" 总是返回 fal

返回缓存的查询计划

Qt数据库- 执行SQL语句

Qt中我想用QsqlQuery来修改数据库中的内容,为啥不能实现?求解,以下是代码

QSqlQuery 忽略 SQLite DB 的排序顺序