【问题标题】:QSqlDatabase doesn't see a tableQSqlDatabase 没有看到表
【发布时间】:2017-04-22 22:17:16
【问题描述】:

我已经创建了一个确实存在于项目目录中的数据库,我可以使用 DBBrowser 和 Ubuntu 终端打开它。他们都表明数据库包含“电影”表,但我在 c++ 中的代码说找不到这样的表

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

if(!db.open())
{
    qDebug() << db.lastError();
    qFatal("Failed to connect");
}

qDebug("Connected");

QSqlQuery query(db);


if(!query.exec("INSERT INTO movies (TITLE,RELEASE,STUDIO,DIRECTOR) VALUES ('Batman v Superman' , 2016 , 'WB', 'ZackSnyder');"))
{
    qDebug() << query.lastError();
}
else {
    qDebug("INSERTED!");
}

输出

Connected
QSqlError("1", "Unable to execute statement", "no such table: movies")

【问题讨论】:

    标签: c++ qt sqlite


    【解决方案1】:

    我猜您的数据库与源代码位于同一文件夹中,但是当您运行和编译应用程序时,它将位于数据库显然不存在的发布/调试文件夹中。

    现在发生的情况是 Qt 在数据库不存在时创建它,因此您会收到 Connected 消息。

    指定完整路径和数据库名称一次即可尝试。它应该按预期执行。

    【讨论】:

    • 非常感谢,就是这样!正在调试文件夹中创建数据库文件。
    • 吸引你的总是小事。
    • 我也喜欢它,所以我知道 :)
    【解决方案2】:

    我已经复制了您的代码(并调整了路径)并在创建的数据库上运行它

    sqlite3 /tmp/TestDatabase.db SQLite version 3.14.0 2016-07-26 15:17:14 Enter ".help" for usage hints. sqlite> create table movies(TITLE text,RELEASE text,STUDIO text,DIRECTOR text); sqlite> .schema CREATE TABLE movies(TITLE text,RELEASE text,STUDIO text,DIRECTOR text);

    它按预期工作,所以它可能涉及到你如何测试它 你确定你是从数据库所在的同一个地方运行你的二进制文件吗?您是否可能使用 .qrc 进行部署?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多