C ++ Qt sql lite数据库连接问题

时间:2017-08-14 06:03:25

标签: c++ database qt sqlite qt5

我使用以下代码使用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”!

如何更正此问题?

1 个答案:

答案 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()例程。

我们从中得出结论,如果数据库不存在,这将创建它,如果存在分配内存的问题,它只会在创建它时产生错误。