Завершить номер базы данных процедуры Android - PullRequest
0 голосов
/ 05 июня 2018

У меня есть вопрос о конкретном примере в Android.Допустим, я выполняю вставку базы данных Room в потоке / asyncTask.

Thread
{
  mDatabase.repoMethods().insert1
  mDatabase.repoMethods().insert2
  mDatabase.repoMethods().insert3                    
}

Если я остановлю поток во время вставки, каков будет конечный результат?Для примера, скажем, я остановил поток, когда происходит вставка1.Будет ли оно завершено сначала, а затем завершится?или он выполнит другие вставки и потом?

1 Ответ

0 голосов
/ 06 июня 2018

Я попытаюсь ответить на этот вопрос следственным способом, потому что я не был уверен в ответе, поэтому я провел некоторое исследование.Некоторые факты являются предположениями, основанными на моих знаниях SQL.Так что кто угодно, не стесняйтесь поправлять меня.В этом вопросе есть две вещи:

1) Первый - прерванный запрос insert.Room - это просто уровень абстракции над SQLite , а SQLite соответствует ACID свойствам.В вашем случае нас интересует A tomicity:

Атомарность означает, что все операции транзакции должны быть завершены или откатить всю транзакцию в случае любых сбоев.

2) Секунда - прерывание Thread, , но , если Thread прервано с помощью Thread.interrupt(), это не повлияет на запрос, как упоминалось здесь и в некоторой степени здесь .Поэтому будет выполнено первое insert, и только тогда будет прервано Thread.

Логически мыслить, если по какой-то причине запрос прерывается как-то (я не уверенкак он переводит в Java), то атомарность SQLite обязательно прервет транзакцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...