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

SELECT COUNT(*) doesn't work in QML

我正在尝试使用使用 sqlite 的 QML LocalStorage 获取记录数。让我们考虑一下这个片段:

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. 中的 属性

为了访问项目,您必须使用:

b.rows.item(i)

其中 i 是您要获取的项目的索引(在您的第一个示例中,i 属于 [0, 1, 2] 因为您有 3 个项目,在第二个中它是0,你可以查询为c.rows.item(0)).

rows 字段显示为空,这是一个有效结果,因为这些项目不是 rows 字段本身的一部分(事实上,您必须使用一种方法来获取它们,到目前为止据我所知,该方法也可能是一个完全包含响应数据的纪念品)并且 item 方法可能被定义为不可枚举(我无法验证它,我在海滩上并且很难探索现在的 Qt 代码 :-))。您可以安全地依赖 length 参数来了解是否有返回值,因此您可以遍历它们以将它们打印出来。我在我的一个项目中做了类似的事情并且工作正常。

item(0) 中的属性与为查询指定的名称相同。我建议将该查询重写为:

select count(*) as cnt from t

然后,您可以得到计数为:

c.rows.item(0).cnt