gpt4 book ai didi

QtQuick LocalStorage 数据库版本不匹配(ini 文件中缺少 "Version"属性)

转载 作者:行者123 更新时间:2023-12-02 01:07:15 25 4
gpt4 key购买 nike

我在 Android 上使用 QtQuick/QML/Qt5.2.1。我还在桌面而不是 Android 上测试了这个问题,我也看到了同样的问题。

我使用 LocalStorage 在应用程序关闭后保留应用程序数据。

我使用openDatabaseSync打开数据库:

var db = LocalStorage.openDatabaseSync(
"TestDB",
"1.0", <-- version
"Test Database",
1000000,
function(db) {
createSchema(db);
populateData(db);
}
);

如果数据库不存在并且已创建,则执行回调函数,在这种情况下,我创建数据库架构并填充初始数据集。

下次应用程序启动时,显然我想保持数据库不变,而不是重新创建它。

问题是当我重新启动应用程序时,我收到此错误:

Error: SQL: database version mismatch

如果我检查第一次运行应用程序时创建数据库时创建的 .ini 文件,我会看到以下内容:

[General]
Description=Test Database
Driver=QSQLITE
EstimatedSize=1000000
Name=TestDB
Version=

您可以清楚地看到这里的一个问题是“Version”属性为空。

当应用程序启动时,它将请求的版本“1.0”与此空字符串“”进行比较,然后失败。

我当然可以通过将版本指定为“”或通过修复 ini 文件来伪造它以使其正常工作 - 这至少告诉我代码在其他方面是正确的 - 但显然这不是解决方案。

那么,我错过了什么还是这是一个 Qt 错误?

最佳答案

创建数据库后可以设置数据库版本:

var db = LocalStorage.openDatabaseSync(
"TestDB",
"1.0",
"Test Database",
1000000,
function(db) {
createSchema(db);
populateData(db);
db.changeVersion("", "1.0");
}
);

由于回调函数只有在数据库不存在时才会被调用,并且changeVersion函数只有在当前版本为“”时才会起作用(否则会抛出异常),所以我相信使用它是安全的。

编辑:也许这是预期的行为...来自 LocalStorage source code ,第 700 行:

            if (dbcreationCallback)
version = QString();

所以,也许您确实需要在创建表后设置数据库版本...在回调上执行此操作之前,它只是一个空数据库,并且不应该真正有版本。

关于QtQuick LocalStorage 数据库版本不匹配(ini 文件中缺少 "Version"属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23021373/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com