Недавно я обнаружил функцию CHANGES()
, доступную внутри SQLite .Я делаю что-то вроде следующего в моем коде 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)
Вопросы:
- Можеткто-нибудь подтверждает это поведение?Можно ли этого ожидать?
- Обрезает ли SQLite таблицу здесь?
- Помимо подсчета строк до
DELETE
, есть ли способ обойти эту проблему??