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}
现在有两个问题:
- 为什么
rows
显示为空
- 如何访问
c.rows.item(0)
中的 属性
为了访问项目,您必须使用:
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
我正在尝试使用使用 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}
现在有两个问题:
- 为什么
rows
显示为空 - 如何访问
c.rows.item(0)
中的 属性
为了访问项目,您必须使用:
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