QSqlDatabase没有看到表

时间:2017-04-22 22:17:17

标签: c++ qt sqlite

我创建了一个肯定存在于项目目录中的数据库,我可以使用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")

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:0)

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

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进行部署?