Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 为什么isOpen()函数总是返回true?_Database_Qt_Sqlite - Fatal编程技术网

Database 为什么isOpen()函数总是返回true?

Database 为什么isOpen()函数总是返回true?,database,qt,sqlite,Database,Qt,Sqlite,在我的构造函数(qt 5.4.1-windows 7)中: 那么我做错了什么?或者,如果用户选中某个复选框,还有其他更好的方法可以将数据库从内存更改为硬盘?对我来说,初始化数据库连接的最佳方法是使用连接名称: QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName); 使用连接名称,您将有一些额外的机会。 正在从数据库连接列表中删除数据库,请查找文档: 按名称访问数据库,查找文档: 在您的情况下,将remove

在我的构造函数(qt 5.4.1-windows 7)中:


那么我做错了什么?或者,如果用户选中某个复选框,还有其他更好的方法可以将数据库从内存更改为硬盘?

对我来说,初始化数据库连接的最佳方法是使用连接名称:

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);