【问题标题】:QtQuick LocalStorage database version mismatch (missing "Version" attribute in ini file)QtQuick LocalStorage 数据库版本不匹配(ini 文件中缺少“版本”属性)
【发布时间】:2014-04-11 19:48:25
【问题描述】:

我在 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=

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

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

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

那么,我是否遗漏了什么或者这是一个 Qt 错误?

【问题讨论】:

    标签: qt qml qt5 qtquick2


    【解决方案1】:

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

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

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

    【讨论】:

    • 这似乎是合理的,但从我找到的文档中看一点也不明显。谢谢!
    【解决方案2】:

    在上面的代码中设置这样的属性

     // db = LocalStorage.openDatabaseSync(identifier, version, description, estimated_size, callback(db))
         LocalStorage.openDatabaseSync("kMusicplay", "0.1", "kMusicPlay app Ubuntu", 10000);
    

    在哪里 'kMusicplay' 是 appname , '0.1' 是版本, 'kMusicPlay app Ubuntu' 是应用描述 '10000' 是数据库的大小

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      相关资源
      最近更新 更多