2017-04-22 94 views
0

我已经创建了一个绝对存在于项目目录中的数据库,我可以使用DBBrowser和Ubuntu终端打开它。他们都表明,该数据库包含“电影”表,但我在C++代码表示,并没有发现这样的表QSqlDatabase没有看到表格

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

我猜你在同一文件夹作为源代码数据库,但是当你运行和编译应用程序它会在数据库中显然不存在的发布/ debug文件夹中。

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

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

+0

非常感谢你,就是这样!数据库文件正在调试文件夹中创建。 –

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