Qt Sqlite错误1 - 表已经存在

时间:2016-07-08 10:06:13

标签: c++ qt sqlite

我有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();
}

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

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