Я работаю с SQLite в Android. У меня есть объект модели, который содержит три списка, один из которых представляет собой список списков. Поэтому у меня есть пять таблиц: A для объекта, B для списка списков, C для его списков и D и E для двух других списков. Случай, который меня озадачил, - это если пользователь обновляет существующий объект и может или не мог внести никаких изменений в его списки. Я думаю, что мне придется запросить каждую таблицу B через E для записей, чьи внешние ключи соответствуют первичному ключу записи, которую я обновляю, и затем прокручивать эти результаты, чтобы увидеть, есть ли у меня соответствующий элемент в списках, вручную удаляя/вставка/обновление по мере необходимости. Но мне кажется, что должен быть лучший способ?Атомно обновлять несколько связанных таблиц
Связанные вопросы: Если я завершу всю операцию в beginTransaction()
и setTransactionSuccessful()
, мне нужно сделать что-нибудь еще, чтобы обеспечить атомарность? Я никогда не сталкивался напрямую с блокировками в своих базах данных, мне нужно добавить проверку ошибок в мои существующие запросы для обработки события, в котором они заблокированы? Есть ли ошибка, в которой мне нужно будет вручную отменить транзакцию, или это произойдет автоматически, когда я закрою соединение с базой данных?
Вам просто нужно обернуть запросы в блок транзакций (начать/зафиксировать части, которые в android перевести на упомянутые вами методы). Вам не нужно делать какие-либо проверки самостоятельно. Вам не нужно беспокоиться о замках. Если что-то пойдет не так, вы получите исключение, которое будет содержать сведения о том, что пошло не так. Вы можете зайти в тупик с MySQL (не уверен в SQLite, но это может быть одно и то же), и в случае тупика вам просто нужно повторить транзакционные + запросы. – Mjh