在我的構造函數(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()' –