2016-11-24 6 views
0

Что произойдет, если исключение произойдет во время транзакции? db.endTransaction() будет вызван, но любой запрос от транзакции будет выполнен? Или все будет отменено?Что делать, если запрос транзакции вызывает исключение?

try { 
    db.beginTransaction(); 
    db.setTransactionSuccessful(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} finally { 
    db.endTransaction(); 
} 
+1

В случае исключения вы хотите отменить транзакцию. В этом случае все записи должны быть отменены или отменены. – Thomas

+0

Это действительно зависит от того, что делают эти команды! Предполагая, что db.setTransactionSuccessful() - это точка, в которой выполняются коммиты, и только после того, как эти данные будут сохранены, обычно внутри блока catch вы должны иметь что-то вроде db.setTransactionFail(), который выполнит откат. – RLM

ответ

0

Весь смысл transactions заключается в обеспечении того, чтобы

всех изменений в пределах одной транзакции в SQLite происходить либо полностью или нет вообще, даже если акт записи изменений к диску прерываются

  • краха программы,
  • сбоя операционной системы, или
  • сбой питания.

Андроида beginTransaction() documentation говорит:

... Когда сделка закончилась все работы, проделанной в этой сделке ... будет фиксироваться или откатываться. Изменения будут отменены, если какая-либо транзакция будет завершена без маркировки как чистой (путем вызова setTransactionSuccessful). В противном случае они будут совершены.

Смежные вопросы