Qt - 在应用程序关闭时同步 SQLite 数据库
Qt - sync SQLite data base on application close
数据库通过以下代码在应用程序中打开:
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 重新启动应用程序后,所有更改都将丢失。应用程序启动速度更快,因此它打开此文件但数据库未更改。
我已经尝试通过
关闭应用程序
db.close();
this->close();
没有运气。 db.open:
之后甚至同步查询也没有帮助
QSqlQuery query(db);
query.exec("PRAGMA synchronous = ON;");
将更改同步到 base.db 我错过了什么?
UPDATE. 您可以尝试构建 sqlwidgetmapper 标准示例并将 :memory: 更改为 "base.db" 文件。它也不会将更改的数据保存到文件中。
问题可能是manual submit policy。
要么将其切换为自动,要么在适当的时候手动调用 QDataWidgetMapper::submit()
(在小部件丢失新值之前)。
数据库通过以下代码在应用程序中打开:
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 重新启动应用程序后,所有更改都将丢失。应用程序启动速度更快,因此它打开此文件但数据库未更改。
我已经尝试通过
关闭应用程序db.close();
this->close();
没有运气。 db.open:
之后甚至同步查询也没有帮助QSqlQuery query(db);
query.exec("PRAGMA synchronous = ON;");
将更改同步到 base.db 我错过了什么?
UPDATE. 您可以尝试构建 sqlwidgetmapper 标准示例并将 :memory: 更改为 "base.db" 文件。它也不会将更改的数据保存到文件中。
问题可能是manual submit policy。
要么将其切换为自动,要么在适当的时候手动调用 QDataWidgetMapper::submit()
(在小部件丢失新值之前)。