【问题标题】:Qt Sqlite error 1 - table already existsQt Sqlite 错误 1 ​​- 表已存在
【发布时间】:2016-07-08 10:06:12
【问题描述】:

我对 Qt 和 sqlite 有疑问。直到最近,我在创建表时都没有遇到任何问题,但是现在,每当我尝试创建表(使用完全相同的函数)时,我都会收到一条错误消息:

QSqlError("1", "Unable to fetch row", "table selections already exists")

我的查询字符串如下:

CREATE TABLE external_files (path VARCHAR (255) NOT NULL, used INTEGER (12) NOT NULL);

这也和以前一样。

奇怪的是,所有的表都没有问题地创建,但我仍然收到错误消息。

如果您对为什么会发生这种情况有任何想法,我将不胜感激。 :)

更新:最小、完整、可验证的示例:

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QSqlError>
#include <QFile>
#include <QTextStream>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "CONN");
    db.setDatabaseName("test.db");
    if(!db.open()){
        qDebug() << "Connection failed!";
    }

    QFile tableListFile(":/resources/sql/tables.sql");
    if(tableListFile.open(QIODevice::ReadOnly))
    {
        QTextStream stream(&tableListFile);
        while(!stream.atEnd())
        {
            QString queryString = stream.readLine();
            qDebug() << "Query string: " << queryString;
            QSqlQuery query(queryString, db);
            if(!query.exec()){
                qDebug() << "Query error: " << query.lastError();
            }
        }
    }

    db.close();

   return a.exec();
}

提前致谢。

【问题讨论】:

  • 数据库告诉你“表selections已经存在”,然后你想知道为什么表存在?
  • 在我运行之前数据库是空的。它会创建表格选择,但我还是会收到此错误消息。
  • 显然,在 CREATE TABLE 语句之前数据库为空。
  • 你绝对肯定CreateProject 不可能两次调用CreateDatabase 吗?您是否完全确定要在程序退出时(或在下次调用 CreateProject 之前)删除 DB 文件?您是否检查过其他表创建调用的复制/粘贴错误?在没有上下文的情况下,这有点乱七八糟...
  • 这没有什么神奇之处。你做错了什么。将所有相关代码(而不是其他代码!)放入单个 main.cpp 文件中,将 SQL 程序作为字符串包含在内,最小化,然后看看你得到了什么。到目前为止,您显示的代码是可以的,除了我们必须猜测所有未显示的代码可能在做什么。

标签: c++ qt sqlite


【解决方案1】:

好的,我设法解决了这个问题。 查询对每个查询字符串执行了 2 次,这导致了错误消息。 为了找到解决方案,我像这样编辑了我的代码:

QString queryString = stream.readLine();
qDebug() << "Query string: " << queryString;
QSqlQuery query;
if(!query.exec(queryString)){
    qDebug() << "Query error: " << query.lastError();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-02
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    • 2019-03-21
    • 1970-01-01
    相关资源
    最近更新 更多