我正在尝试使用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))
}
)
}
输出结果为:
qml:3
qml:{“rowsAffected”:0,“insertId”:“”,“rows”:{}}
我错误地认为SELECT COUNT(*)
没有输出任何内容?
编辑: rows
在第二个命令中似乎只有空。调用
console.log(JSON.stringify(c.rows.item(0)))
给出
qml:{“COUNT(*)”:3}
现在有两个问题:
rows
显示为空c.rows.item(0)
答案 0 :(得分:6)
要访问这些项目,您必须使用:
b.rows.item(i)
i
是您要获取的项目的索引(在您的第一个示例中,i
属于[0, 1, 2]
,因为您有3个项目,第二个是0
{1}}您可以将其查询为c.rows.item(0)
)。
rows
字段显示为空且结果有效,因为这些项目不属于rows
字段本身(事实上,您必须使用某种方法来获取它们,就我而言知道该方法也可以是一个完全包含响应数据的纪念品,而item
方法可能被定义为不可枚举(我无法验证它,我在沙滩上,探索Qt代码非常困难)现在:-))。您可以安全地依赖length
参数来了解是否存在返回值,因此您可以迭代它们以将其打印出来。我在我的一个项目中做了类似的事情并且工作正常。
item(0)
内的属性与查询的名称相同。我建议将该查询重写为:
select count(*) as cnt from t
然后,您可以将计数视为:
c.rows.item(0).cnt