在我的构造函数(QT 5.4.1 - Windows 7中):为什么isOpen()函数总是返回true?
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(":memory:");
db.open();
QSqlQuery q;
q.exec("create table authors(num integer, birthdate date)");
q.exec("insert into authors values('123', '2015-01-01')");
qDebug()<<"your info saved in db.";
每一个东西是好的,到现在为止,但后来,我需要改变我的数据库,并永久保存某个日期,所以:
int Dialog::SaveInfosPermanent()
{
QSqlDatabase::database().close();
if (QSqlDatabase::database().isOpen()) {
qDebug()<<"DB is open.";
return 1;
}
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("newDB.db");
db.open();
QSqlQuery q;
q.exec("create table authors(num integer, birthdate date)");
q.exec("insert into authors values('123', '2015-01-01')");
qDebug()<<"your info saved in db.";
return 0;
}
输出:
your info saved in db.
QSqlError("", "", "")
DB is open.
那我做错了吗?或者如果用户选择某个复选框,还有更好的其他想法可以将db从内存更改为硬盘?
您知道'QSqlDatabase :: database()'在默认情况下也会打开数据库连接吗?如果它不是你想要的,那么你必须指定'open'参数:'QSqlDatabase :: database(“QSQLITE”,false).isOpen()' –