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

QtQuick LocalStorage数据库版本不匹配(ini文件中缺少“版本”属性),qt,qml,qt5,qtquick2,Qt,Qml,Qt5,Qtquick2,我在Android上使用QtQuick/QML/Qt5.2.1。我也在桌面而不是Android上测试了这个问题,我发现了同样的问题 我使用LocalStorage在应用程序关闭后保存应用程序数据 我使用openDatabaseSync打开数据库: var db = LocalStorage.openDatabaseSync( "TestDB", "1.0", <-- version "Test Database", 1000000, functio

我在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);
    }
);
如果我检查在第一次运行应用程序时创建数据库时创建的.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函数只会在当前版本为“”时工作(否则会引发异常),因此我相信使用它是安全的

编辑:也许这是预期的行为。。。从,第700行:

            if (dbcreationCallback)
                version = QString();

所以,在创建表之后,可能您真的需要设置db版本。。。在回调上执行此操作之前,它只是一个空数据库,不应该真正具有版本。

在上述代码中设置类似的属性

 // db = LocalStorage.openDatabaseSync(identifier, version, description, estimated_size, callback(db))
     LocalStorage.openDatabaseSync("kMusicplay", "0.1", "kMusicPlay app Ubuntu", 10000);
在哪里 “kMusicplay”是appname, “0.1”是版本, “kMusicPlay应用程序Ubuntu”是应用程序描述
“10000”是数据库的大小,这似乎是合理的,但从我找到的文档中根本看不出来。谢谢
 // db = LocalStorage.openDatabaseSync(identifier, version, description, estimated_size, callback(db))
     LocalStorage.openDatabaseSync("kMusicplay", "0.1", "kMusicPlay app Ubuntu", 10000);