Android sqlite параллелизм без исключений - PullRequest
11 голосов
/ 31 августа 2010

Sqlite на Android позволяет получить доступ к базе данных из нескольких процедур для чтения, но если в данный момент вы выполняете запись из одного процесса, операции чтения и записи из других процедур вызовут исключение, поскольку первая запись заблокирована в БД.

Под "procs" я подразумеваю другие потоки в том же приложении.

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

Прогнозируя "почему ты так поступаешь?"ответы, это просто, как мы это делаем, и это все.Мы также не собираемся использовать контент-провайдера.Просто нужен способ синхронизации доступа к базе данных.

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

Ответы [ 2 ]

17 голосов
/ 31 августа 2010

Пока вы используете один и тот же объект SQLiteDatabase, синхронизация для вас сделана.

Так что, если вы получаете доступ к объекту через одноэлементный режим, проблем не должно быть. Хотя вы можете добавить дополнительную логику, если хотите реализовать тайм-аут, например, подождите / сообщите или что-то подобное.

2 голосов
/ 31 августа 2010

Или вы можете использовать другую базу данных, которая его поддерживает, например H2 .Я знаю, это может звучать как странная идея.Но согласно моему первоначальному тесту он работает хорошо (как на эмуляторе, так и на устройстве) и на самом деле не медленнее.За исключением открытия и закрытия базы данных, которая в настоящее время работает довольно медленно, около 1 секунды, но на это есть другие причины, и, надеюсь, это будет исправлено в следующей версии.

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