mar*_*trz 3 sqlite qt local-storage qml qtquick2
我正在尝试用QML获取记录的数量LocalStorage,它使用的是sqlite.我们考虑一下这个片段:
function f() {
var db = LocalStorage.openDatabaseSync(...)
db.transaction (
function(tx) {
var b = tx.executeSql("SELECT * FROM t")
console.log(b.rows.length)
var c = tx.executeSql("SELECT COUNT(*) FROM t")
console.log(JSON.stringify(c))
}
)
}
Run Code Online (Sandbox Code Playgroud)
输出是:
qml :3 qml:{"rowsAffected":0,"insertId":"","rows":{}}
我输错了SELECT COUNT(*)什么不输出任何东西?
编辑: rows在第二个命令中只显示为空.调用
console.log(JSON.stringify(c.rows.item(0)))
Run Code Online (Sandbox Code Playgroud)
给
qml:{"COUNT(*)":3}
现在有两个问题:
rows显示为空c.rows.item(0)要访问这些项目,您必须使用:
b.rows.item(i)
Run Code Online (Sandbox Code Playgroud)
i你要获得的项目的索引在哪里(在你的第一个例子中,i属于[0, 1, 2]你有3个项目,在第二个属性中0,你可以查询它c.rows.item(0)).
该rows字段显示为空,它是一个有效的结果,因为这些项目不属于rows字段本身(实际上你必须使用一种方法来获取它们,据我所知,该方法也可以是一个完全包含响应的纪念品数据)和item方法可能被定义为不可枚举(我无法验证它,我在沙滩上,现在很难探索Qt代码:-)).您可以安全地依赖length参数来了解是否存在返回值,因此您可以迭代它们以将其打印出来.我在我的一个项目中做了类似的事情并且工作正常.
里面的属性item(0)具有与查询相同的名称.我建议将该查询重写为:
select count(*) as cnt from t
Run Code Online (Sandbox Code Playgroud)
然后,您可以获得计数:
c.rows.item(0).cnt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |