gpt4 book ai didi

android - android SQLite 查询是否延迟执行?

转载 作者:行者123 更新时间:2023-11-30 03:01:35 24 4
gpt4 key购买 nike

我刚刚遇到了一些奇怪的事情。假设我有一张 table

_id | caption
1 | foo

然后我直接在 SQLite 中对其执行以下查询:

select _id, (caption != "bar") as caption from the_table;

我得到(预期的)输出:

_id | caption
1 | 1

但是执行这段代码:

// This will execute the EXACT SAME query (checked via debugger)
Cursor affected = db.query(table, (String[]) projection.toArray(new String[0]), selection, selectionArgs, null, null, null);
// ############ UPDATE ROW 1 TO CAPTION=bar #######
int result = db.update(table, values, selection, selectionArgs);

affected.moveToPosition(-1);
while (affected.moveToNext()) {
long id = affected.getLong(0); // We made the _id column the first in the projection
for (int i = 1; i < affected.getColumnCount(); i++) {
Log.d("xyz", affected.getInt(i) + "");
}
}

让我明白:LogCat 中的“xyz 0”。

游标是否在第一次游标访问时延迟执行查询?

如果我在查询之后立即插入 affected.getCount() 似乎可以工作。

最佳答案

是的,存在抽象漏洞。

查询单独转换为 prepare将 SQL 编译为 sqlite 程序的调用(想想字节码)。该程序未运行。

要运行已编译的 sqlite 程序,可以使用 step它要么返回结果行、完成状态代码,要么返回错误。在 Android 中,您可以通过对返回的光标调用 moveTo...() 方法之一来有效地运行程序。

sqlite C API 不直接支持获取游标计数。安卓implements它通过运行查询并将结果存储在“游标窗口”缓冲区中。同一缓冲区用于稍后访问游标的数据。

关于android - android SQLite 查询是否延迟执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22438706/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com