【问题标题】:How to deal: QSqlQuery::exec() returns false如何处理:QSqlQuery::exec() 返回 false
【发布时间】:2020-03-12 10:42:53
【问题描述】:

我正在使用 Qt 和 sqlite3。问题是:

QSqlQuery::exec() 返回 false。

我认为这是由 QSqlDatabase::open() 引起的,因为它总是返回 true! 我发现实际上我使用 QSqlDatabase::setDatabaseName() 设置什么并不重要,它会返回 true,因为 sqlite 会创建不存在的 DB。

我使用 QFile::exist 来测试 DB 是否存在。但一切都很好,QFile 看到了 db。

代码:

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("temp_client_db.sl3");

    QFile datebase("temp_client_db.sl3");

    if (!datebase.exists() || !db.open())
    {
       QMessageBox::critical(this, "Error", "Database isn't connected.");
    }
    else
    {
        QSqlQuery query;
        query.prepare("SELECT * FROM exist_ask");

        if (!query.exec())
        {
             QMessageBox::critical(this, "Error", "\"SELECT exist_ask\" works badly.");
        }
        else
        {
             ...

【问题讨论】:

  • qDebug() << query.lastError().toString();里面if (!query.exec())的输出是什么
  • 很可能是表不存在或者有拼写错误。尝试遍历QSqlDatabase::tables() 的结果以确认它存在,或使用单独的数据库管理器应用程序检查数据库。
  • @eyllanesc 感谢您的帮助。我发现了问题。不知怎么的,连QFile都报我有文件了,其实我只是没有把数据库加到build目录下。
  • @CPerkins 感谢您的帮助。我发现了问题。不知怎么的,连QFile都报我有文件了,其实我只是没有把数据库加到build目录下。
  • @VolodimirPavlenko sqlite 有一个特殊的特性:如果数据库不存在,那么 sqlite 将创建它。如果要验证数据库是否存在,则必须在打开数据库之前进行。

标签: c++ sql sqlite qt qt5


【解决方案1】:

我只是没有将数据库添加到构建目录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-25
    • 1970-01-01
    • 2014-12-17
    • 1970-01-01
    • 2013-05-27
    相关资源
    最近更新 更多