QtQuick LocalStorage数据库版本不匹配(ini文件中缺少“版本”属性)
我在Android上使用QtQuick/QML/Qt5.2.1。我也在桌面而不是Android上测试了这个问题,我发现了同样的问题 我使用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
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);