Ответ
В Android атомарность транзакций обеспечивается через SQLiteDatabase с помощью методов beginTransaction(), setTransactionSuccessful() и endTransaction().
val db = writableDatabase
db.beginTransaction()
try {
// Операции с БД
db.insert("table", null, values)
db.update("table", values, whereClause, null)
db.setTransactionSuccessful() // Подтверждаем успешность
} catch (e: Exception) {
// В случае ошибки транзакция откатится
} finally {
db.endTransaction() // Завершаем транзакцию
}
Ключевые моменты:
- Все операции между
beginTransaction()иendTransaction()выполняются как единое целое - Если не вызвать
setTransactionSuccessful(), изменения автоматически откатятся - В случае исключения транзакция также откатывается
- Гарантируется, что другие потоки не увидят промежуточных состояний БД