Database 为什么isOpen()函数总是返回true?
在我的构造函数(qt 5.4.1-windows 7)中:Database 为什么isOpen()函数总是返回true?,database,qt,sqlite,Database,Qt,Sqlite,在我的构造函数(qt 5.4.1-windows 7)中: 那么我做错了什么?或者,如果用户选中某个复选框,还有其他更好的方法可以将数据库从内存更改为硬盘?对我来说,初始化数据库连接的最佳方法是使用连接名称: QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName); 使用连接名称,您将有一些额外的机会。 正在从数据库连接列表中删除数据库,请查找文档: 按名称访问数据库,查找文档: 在您的情况下,将remove
那么我做错了什么?或者,如果用户选中某个复选框,还有其他更好的方法可以将数据库从内存更改为硬盘?对我来说,初始化数据库连接的最佳方法是使用连接名称:
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName);
使用连接名称,您将有一些额外的机会。
正在从数据库连接列表中删除数据库,请查找文档:
按名称访问数据库,查找文档:
在您的情况下,将removeDatabase()
与连接名一起使用,但不要忘记db
的作用域。请参见我附加的链接中的示例
在这两种情况下,您也可以使用名称相同的db,如下所示:
使用驱动程序将数据库添加到数据库连接列表中
类型和连接名称connectionName。如果已经存在
名为connectionName的数据库连接,该连接将被删除
数据库连接由connectionName引用。新的
返回添加的数据库连接
您是否知道默认情况下,
QSqlDatabase::database()
也会打开数据库连接?如果它不是您想要的,那么您必须指定open
参数:QSqlDatabase::database(“QSQLITE”,false).isOpen()
那么您现在的意思是什么?你的意思是我现在不能用默认名称关闭连接吗?我的意思是,如果你不确定你的连接是否关闭,请使用安全的方法
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.
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName);
QSqlDatabase::removeDatabase(connectionName);
QSqlDatabase db = QSqlDatabase::database(connectionName);