在我的构造函数(qt 5.4.1 -windows7)中:
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.那么我到底做错了什么呢?或者,如果用户选择某个复选框,那么将数据库从内存更改为硬盘有更好的其他想法吗?
发布于 2015-05-15 19:11:03
对我来说,初始化数据库连接的最好方法是使用连接名称:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName);有了连接名称,您就有了一些额外的机会。从数据库连接列表中删除数据库,找到文档here:
QSqlDatabase::removeDatabase(connectionName);按名称访问您的数据库,查找文档here:
QSqlDatabase db = QSqlDatabase::database(connectionName);在本例中,使用带有连接名称的removeDatabase(),但不要忘记db的作用域。参见我附加的链接中的示例。
您也可以在这两种情况下使用具有相同名称的db,如docs所说:
使用驱动程序类型和连接名称connectionName将数据库添加到数据库连接列表中。如果已经存在一个名为connectionName的数据库连接,则删除该连接。
数据库连接由connectionName引用。返回新添加的数据库连接。
https://stackoverflow.com/questions/30255718
复制相似问题