2017-04-22 58 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進行部署?