Qt - 在应用程序关闭时同步SQLite数据库

时间:2016-09-21 19:15:16

标签: qt sqlite qtsql

数据库在应用程序中通过以下代码进行操作:

db = QSqlDatabase::addDatabase("QSQLITE");
bool dbExists = QFile::exists("base.db");
db.setDatabaseName("base.db"); // ":memory:"
if (!db.open()) {
    db.close();
    QMessageBox::critical(0, tr("Cannot open database"),
                          tr("Unable to establish a database connection.\n"
                             "This example needs SQLite support. Please read "
                             "the Qt SQL driver documentation for information how "
                             "to build it."), QMessageBox::Cancel);
    return;
}
if (!dbExists)
    createDB();

我已经通过QDataWidgetMapper将一些表映射到小部件。在应用程序运行期间一切正常。更改生效。但是在使用现有的base.db重新启动应用程序后,所有的chages都会丢失。应用程序启动速度更快,因此它会打开此文件,但数据库不变。

我试图通过

关闭申请
db.close();
this->close();

没有运气。 db.open后,甚至同步查询都没有帮助:

QSqlQuery query(db);
query.exec("PRAGMA synchronous = ON;");

我错过了将更改同步到base.db的内容吗?

UPDATE。您可以尝试构建 sqlwidgetmapper 标准示例并将:memory:更改为“base.db”文件。它也不会将更改的数据保存到文件中。

1 个答案:

答案 0 :(得分:2)

问题可能是manual submit policy

将其切换为自动,或在适当的时间手动调用QDataWidgetMapper::submit()(从小部件中丢失新值之前)。