BEGIN IMMEDIATE TRANSACTION;
do a bunch of stuff;
ROLLBACK TRANSACTION;
Если другой поток читает из базы данных, то ROLLBACK
завершится ошибкой с SQLITE_BUSY
, но вы можете выполнить его снова после того, как ожидающие чтения завершатся. Если другой поток захочет записать в базу данных, он попадет в вашу блокировку.
Теперь, есть что-то забавное в использовании транзакций таким образом, как насчет того, чтобы между вами и базой данных был программный слой в стиле ORM, который работает непосредственно с вашими собственными объектами и сохраняет временные изменения в памяти? *
Я имею в виду, если вы не хотите менять базу данных, возможно, вам нужен другой слой кода, а не функция базы данных?