Сброс и база данных SQLite на Android

У меня есть приложение Android с использованием базы данных SQLite. Я открываю базу данных при запуске приложения, но никогда не закрываю его, поскольку он находится в постоянном использовании.

Каков наилучший способ сообщить базе данных очистить все изменения в постоянном хранилище? Нужно ли мне просто закрыть его и снова открыть или есть более эффективный способ?

Моя проблема заключается в том, что при тестировании на телефоне отключение телефона после того, как количество записей иногда заставляет базу данных терять самые последние обновления при перезапуске приложения, что явно неприемлемо для системы баз данных.

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

Я открываю базу данных при запуске приложения, но никогда не закрываю его, поскольку он находится в постоянном использовании.

Не делай этого. Очевидно, вы игнорируете все ошибки, появляющиеся в LogCat, которые жалуются на то, что вы протекаете соединения с базой данных.

Каков наилучший способ сообщить базе данных очистить все изменения в постоянном хранилище?

Он будет делать это автоматически в конце транзакции . По умолчанию каждая отдельная операция SQL (например, вставка) является транзакцией.

Нужно ли мне просто закрыть его и снова открыть или есть более эффективный способ?

Вы должны закрыть свою базу данных в какой-то момент (например, onDestroy() службы, которая опосредует вашу базу данных).

Моя проблема заключается в том, что при тестировании на телефоне отключение телефона после того, как количество записей иногда заставляет базу данных терять самые последние обновления при перезапуске приложения, что явно неприемлемо для системы баз данных.

Если вы можете создать образец проекта, который демонстрирует проблему даже после правильного закрытия соединения с базой данных, отправьте его на отслеживание проблем Android .

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

Закройте его, когда все действия будут отключены от службы, которая опосредует соединение с базой данных, запуская этот метод onDestroy() службы.

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

Если вы используете какие-либо транзакции, они вложены. Значение, если вы выходите из одного перед его прекращением. В конце концов вы вернетесь, когда перезагрузится телефон / приложение, так как вы никогда не закрываете соединение.

 db.beginTransaction(); try { ... db.setTransactionSuccessful(); } finally { db.endTransaction(); } 

Это на дроиде? И как именно вы выключите телефон? Если вы не вытащите батарею, то выключение телефона приведет к медленному отключению операционной системы, и в этот момент она будет передавать все в память.

Когда вы потеряете свою базу данных? После каждого перезапуска приложения или просто случайно? Если это после каждого перезапуска, это похоже на то, что вы уничтожаете базу данных при запуске.

Intereting Posts