【问题标题】:SELECT COUNT(*) doesn't work in QMLSELECT COUNT(*) 在 QML 中不起作用
【发布时间】:2015-08-13 13:02:07
【问题描述】:

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

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

【问题讨论】:

    标签: qt sqlite local-storage qml qtquick2


    【解决方案1】:

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

    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
    

    【讨论】:

    • 回复已添加。如果它适合您,请不要忘记接受回复,它将在以后的搜索中帮助未来的用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    • 2015-02-22
    • 2021-08-26
    • 1970-01-01
    • 1970-01-01
    • 2014-03-19
    相关资源
    最近更新 更多