我使用以下代码使用Qt IDE连接到数据库。如果它成功连接到数据库Connected to db
则打印在标签上。但问题是,如果我甚至给出了错误的数据库路径,它会在标签上返回Connected to db
如何更正此问题?
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”!
如何更正此问题?
答案 0 :(得分: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数据库文件,由 filename参数。 filename参数被解释为UTF-8 sqlite3_open()和sqlite3_open_v2()以及本机字节中的UTF-16 订购sqlite3_open16()。通常是数据库连接句柄 以* ppDb返回,即使发生错误也是如此。 唯一的例外是 如果SQLite无法分配内存来保存sqlite3对象,a NULL将写入* ppDb而不是指向sqlite3的指针 宾语。 如果成功打开(和/或创建)数据库,那么 返回SQLITE_OK 。否则返回错误代码。该 sqlite3_errmsg()或sqlite3_errmsg16()例程可用于获取 失败后的错误的英语描述 任何sqlite3_open()例程。
我们从中得出结论,如果数据库不存在,这将创建它,如果存在分配内存的问题,它只会在创建它时产生错误。