gpt4 book ai didi

android - SQLite changes() 函数报告在某些删除语句中更改了 0 行

转载 作者:搜寻专家 更新时间:2023-11-01 09:08:55 24 4
gpt4 key购买 nike

我最近在 SQLite 中发现了 CHANGES() 函数.我正在我的 Android 代码中执行类似以下操作:

db.execSQL(sqlStatement, argumentArray);
int result;
SQLiteStatement stmt = db.compileStatement("SELECT CHANGES()");
try {
return stmt.simpleQueryForLong();
} finally {
stmt.close();
}

我所看到的是我获得了所有语句的良好数据,例如:

UPDATE `footable` SET `stuff` = 'fepojefpjo'   (returns 1 row updated)
DROP TABLE `footable` (returns 2 rows dropped)
DELETE FROM `footable` WHERE `id` IN (?,?) (returns 2 rows deleted)

但当我发出以下语句时,我总是会更改 0 行——即使确实有行被删除:

DELETE FROM `footable`                         (always returns 0)

由于我要从表中删除所有内容,我想知道 SQLite 是否在幕后进行某种截断操作。如果我只是在语句末尾添加一个垃圾 WHERE 1,它会返回正确的行数。

DELETE FROM `footable` WHERE 1                 (works)

问题:

  1. 任何人都可以确认此行为吗?这是意料之中的事吗?
  2. SQLite 是否截断了此处的表?
  3. 除了计算 DELETE 之前的行数之外,还有什么办法可以解决这个问题吗?

最佳答案

我认为这很可能是由于所谓的截断优化(我说最有可能是因为我不确定您使用的是哪个版本的 SQLite)。当没有 WHERE 子句时,SQLite 使用优化来删除整个表的内容,而不必单独访问表的每一行。查看reference docs for DELETE .

请注意,此行为自 3.6.5 起已修复。

关于android - SQLite changes() 函数报告在某些删除语句中更改了 0 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9843255/

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