SELECT COUNT(*)在QML中不起作用

时间:2015-08-13 13:02:08

标签: qt sqlite 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))
        }
        )
}

输出结果为:

  

qml:3
  qml:{“rowsAffected”:0,“insertId”:“”,“rows”:{}}

我错误地认为SELECT COUNT(*)没有输出任何内容?

编辑: rows在第二个命令中似乎只有空。调用

console.log(JSON.stringify(c.rows.item(0)))

给出

  

qml:{“COUNT(*)”:3}

现在有两个问题:

  1. 为什么rows显示为空
  2. 如何访问c.rows.item(0)
  3. 中的媒体资源

1 个答案:

答案 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