2017-08-14 24 views
0

我使用以下代碼連接到使用Qt IDE的數據庫。如果它成功連接到數據庫Connected to db打印在標籤上。但問題是如果我甚至給了一個錯誤的數據庫路徑,它會在標籤上返回Connected to db我該如何糾正這個問題?C++ Qt sql lite數據庫連接問題

QSqlDatabase mydb= QSqlDatabase::addDatabase("QSQLITE"); 
mydb.setDatabaseName("x"); 
if(!mydb.open()){ 
    ui->label->setText("Failed to open the db"); 
} 
else{ 
    ui->label->setText("Connected to db"); 
} 

即使在上面的代碼,我把「X」,這是不是有效的數據庫路徑我得到「連在標籤DB」當我運行該程序!

我怎樣才能糾正這種?問題

+1

Sqlite是一個特定的數據庫,如果數據庫不存在,它會創建它。 – eyllanesc

回答

1

Qt使用的SQLite作爲後端使用sqlite庫,所以你會使用的功能之一打開數據庫:

int sqlite3_open(
    const char *filename, /* Database filename (UTF-8) */ 
    sqlite3 **ppDb   /* OUT: SQLite db handle */ 
); 
int sqlite3_open16(
    const void *filename, /* Database filename (UTF-16) */ 
    sqlite3 **ppDb   /* OUT: SQLite db handle */ 
); 
int sqlite3_open_v2(
    const char *filename, /* Database filename (UTF-8) */ 
    sqlite3 **ppDb,   /* OUT: SQLite db handle */ 
    int flags,    /* Flags */ 
    const char *zVfs  /* Name of VFS module to use */ 
); 

按照docs

這些例程按照 文件名參數的指定打開SQLite數據庫文件。對於 sqlite3_open()和sqlite3_open_v2(),文件名參數被解釋爲UTF-8,並且在本機字節 中爲sqlite3_open16()將其解釋爲UTF-8。即使發生錯誤,數據庫連接句柄通常也會在* ppDb中返回 。 唯一的例外是 如果SQLite無法分配內存來保存sqlite3對象,則將NULL寫入* ppDb而不是指向sqlite3 對象的指針。 如果數據庫成功打開(和/或創建),則返回 SQLITE_OK。否則,返回一個錯誤代碼。 sqlite3_errmsg()或sqlite3_errmsg16()例程可用於獲取 任何sqlite3_open()例程失敗後的錯誤英文描述。

從中我們可以得出結論,如果數據庫不存在,它將創建它,它只會在創建它時產生錯誤,如果存在分配內存的問題。