2015-04-30 2 views
0

У меня есть приложение, которое вставляет и/или обновляет несколько (100) строк в таблице. В моем приложении одновременно работает только один поток. Каждая строка вычисляется и проверяется перед каждой вставкой/обновлением в нескольких функциях.Обеспечение безопасной работы базы данных SQLite (не относящейся к потокобезопасности)

Я обеспокоен тем, что если приложение прерывается между началом вставки строк и концом, мои данные будут повреждены/неполны. Это возможно?

Я попытался несколько раз прервать процесс с помощью домашнего ключа, это не так, но это не исчерпывающий подход.

Я использую метод singleton, обсуждаемый здесь: Is Sqlite Database instance thread safe, но это не касается моего вопроса.

+1

Используйте [транзакцию] (https://www.sqlite.org/lang_transaction.html) вокруг всех UPDATE и INSERT. –

+0

транзакция вокруг всех обновлений и вставок не будет работать, если я вставляю 200+ строк отдельно. Я подумал, как правильно это сделать (я думаю). Поместите всю информацию о строках в arraylist, затем поместите цикл между начальной и конечной транзакциями, чтобы вставить все строки. Спасибо за ваш комментарий, хотя он указал мне в правильном направлении. – rnorman3

+0

Почему вы принимаете ответ, который рекомендует транзакции, если вы не хотите использовать транзакцию? –

ответ

1

From the fine manual. , ,

Транзакционная база данных, в которой все изменения и запросы кажутся Atomic, соответсвие, изолированность, и Долговечность (ACID). SQLite реализует сериализуемые транзакции, которые являются атомарными, согласованными, изолированными и долговечными, даже если транзакция прерывается сбой программы , сбоя операционной системы или сбоя питания компьютера .

Если вы выполняете несколько сотен операторов SQL, и вы должны знать, что либо а) все они привержены, или б) ни один из них покончили, оберните все эти SQL заявления в пределах одного transaction.

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