Запись в бд из нескольких потоков

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Запись в бд из нескольких потоков

Сообщение razmus » 19 сен 2014, 11:17

Здравствуйте!
Столкнулся с такой проблемой, в приложении есть бд. Когда мне нужно записать или прочитать данные, я открываю подключение, делаю что-то и закрываю подключение. Понадобилось реализовать сервис который будет каждые 5 сек, писать "некие" данные в бд. Возникла проблема с одновременным доступом, то есть сервис что-то пишет в бд, и в это время бд нужна и приложению. Поможет ли реализация ContentProvider в приложении для решения этого вопроса, или же нужно как-то реализовать очередь доступа к базе, если да то как это делается? Где можно про это почитать, так как мне найти не удалось, может искал не правильно. Или может для сервиса нужно отдельно сделать свою базу данных и когда нужны данные то просто обращаться к сервису за данными?

Заранее благодарен!

З.Ы.
В приложении 2-е базы данных... Есть ли сложности написания ContentProvider в таком случает? Насколько я понимаю два хелпера и флаг для понимания с какой базой работать, но что-то мне подсказывает, что граблей там еще много...

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Запись в бд из нескольких потоков

Сообщение razmus » 19 сен 2014, 12:07

З.Ы.Ы.
Или, может, выше написанное не правильный подход к решению "задачи"?

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: Запись в бд из нескольких потоков

Сообщение KamiSempai » 19 сен 2014, 13:09

Контент провайдеры были сделаны как раз для работы из нескольких потоков.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Запись в бд из нескольких потоков

Сообщение razmus » 19 сен 2014, 13:38

KamiSempai писал(а):Контент провайдеры были сделаны как раз для работы из нескольких потоков.
Спасибо. А не будет ли проблем с попыткой одновременной записи в бд, и тем что у меня 2-е бд? Дело в том, что переписать приложение под контент провайдер будет довольно трудоемкой задачей, не хочется наткнуться на "большие грабли".


Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Запись в бд из нескольких потоков

Сообщение Foenix » 19 сен 2014, 17:54

На самом деле база нужна одна, а не две. Под контент провайдер переписать на самом деле не сложно, сложно вначале в нем разобраться.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Запись в бд из нескольких потоков

Сообщение altwin » 20 сен 2014, 10:45

Foenix писал(а):На самом деле база нужна одна, а не две. Под контент провайдер переписать на самом деле не сложно, сложно вначале в нем разобраться.
а зачем? :) Каждый раз разбираться в чужом коде после апдейтов sdk, если можно один раз написать правильно самому... :P
Изображение

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

Re: Запись в бд из нескольких потоков

Сообщение Foenix » 20 сен 2014, 11:54

на другой волне. Какой еще чужой код?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

Re: Запись в бд из нескольких потоков

Сообщение altwin » 20 сен 2014, 12:26

Foenix писал(а):на другой волне. Какой еще чужой код?
контент провайдер нам дали готовый. чужой - это гугла. :P
Изображение

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Запись в бд из нескольких потоков

Сообщение razmus » 01 окт 2014, 15:37

Foenix писал(а):На самом деле база нужна одна, а не две. Под контент провайдер переписать на самом деле не сложно, сложно вначале в нем разобраться.
В моем случае лучше 2-е использовать, а не одну с таблицами из двоих бд, меньше проблем. По крайней мере так казалось по началу.

Ответить