首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么isOpen()函数总是返回true?

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

Stack Overflow用户
提问于 2015-05-15 17:14:09
回答 1查看 605关注 0票数 0

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

代码语言:javascript
复制
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.";

到现在为止,一切都很好,但是,稍后我需要更改我的数据库并永久保存一些日期,所以:

代码语言:javascript
复制
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;
}

和输出:

代码语言:javascript
复制
your info saved in db.
QSqlError("", "", "")
DB is open.

那么我到底做错了什么呢?或者,如果用户选择某个复选框,那么将数据库从内存更改为硬盘有更好的其他想法吗?

EN

回答 1

Stack Overflow用户

发布于 2015-05-15 19:11:03

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

代码语言:javascript
复制
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", connectionName);

有了连接名称,您就有了一些额外的机会。从数据库连接列表中删除数据库,找到文档here

代码语言:javascript
复制
QSqlDatabase::removeDatabase(connectionName);

按名称访问您的数据库,查找文档here

代码语言:javascript
复制
QSqlDatabase db = QSqlDatabase::database(connectionName);

在本例中,使用带有连接名称的removeDatabase(),但不要忘记db的作用域。参见我附加的链接中的示例。

您也可以在这两种情况下使用具有相同名称的db,如docs所说:

使用驱动程序类型和连接名称connectionName将数据库添加到数据库连接列表中。如果已经存在一个名为connectionName的数据库连接,则删除该连接。

数据库连接由connectionName引用。返回新添加的数据库连接。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30255718

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档