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