SQLiteException: database is locked

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

SQLiteException: database is locked

Сообщение adarash » 14 янв 2014, 10:52

Проблема вот в чем. Вычисления с использованием базы данных могут вестись с двух мест одновременно. Но в таком случае выдает ошибку "database is locked". Вести все последовательно нельзя. Вычисления тяжелые, если их проводить в одном потоке, то приложение просто повиснет на 5-10 секунд, я уже не говорю про слабенькие телефоны.
Подскажите кто нибуть, как с этим бороться? У меня была мысль вычисления проводить с помощью Handler (ну на подобии очереди что-то).
Подскажите пожалуйста. Очень надо.

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

Re: SQLiteException: database is locked

Сообщение KamiSempai » 14 янв 2014, 11:42

На сколько я знаю, эту проблему можно решить используя ContentProvider.
Точнее на этот вопрос сможет ответить Foenix.

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

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: SQLiteException: database is locked

Сообщение adarash » 14 янв 2014, 11:49

KamiSempai писал(а): Касаемо подвисаний. Не пойму, Вы обработку в UI потоке делаете?
Тяжелые вычисления проходят в AsyncTask. Легкие в UI.

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

Re: SQLiteException: database is locked

Сообщение KamiSempai » 14 янв 2014, 12:03

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

Немного по AsyncTask. Если API приложения выше 11 можно использовать его и не бояться параллельного обращения к базе. По умолчанию все таски выполняются последовательно. При более низком API они будут выполняться параллельно и этот фокус не прокатит.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: SQLiteException: database is locked

Сообщение adarash » 14 янв 2014, 12:08

KamiSempai писал(а):Очевидно, легкие не такие уж и легкие. Тут на днях вебинар проходил, там как-раз рассказывалось как это можно узнать.

Немного по AsyncTask. Если API приложения выше 11 можно использовать его и не бояться параллельного обращения к базе. По умолчанию все таски выполняются последовательно. При более низком API они будут выполняться параллельно и этот фокус не прокатит.
В том то и дело что на стареньких андроидах такое вылетает

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

Re: SQLiteException: database is locked

Сообщение Foenix » 14 янв 2014, 12:33

да, к.п. решит проблему.
Андроид вообще говоря не предназначен для сложных обработок данных. А что вы там такое обрабатываете, вычисляете?
R.id.team

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

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: SQLiteException: database is locked

Сообщение adarash » 14 янв 2014, 12:50

Честно говоря. Приложение называется "Женский календарь". Заказали - я делаю. Сначала мне тоже показалась "Какие там могут быть сложные расчеты ?". А выходит что может. Попробуйте не только просчитать, но еще и спрогнозировать,а если еще и выборка за год. Да и программировал по принципу "пользователь - идиот", с кучей проверок на достоверность данных.
Как показала практика: примерно 6,7% пользовательской аудитории не в состоянии ввести в поле цифру(пришлось для старых версий писать свой NumberPicker), я уже не говорю о датах.

P.S. Что такое " к.п."? извините за незнание.

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

Re: SQLiteException: database is locked

Сообщение Foenix » 14 янв 2014, 14:01

KamiSempai писал(а):На сколько я знаю, эту проблему можно решить используя ContentProvider.
к.п.
ну, то, что вы говорите - тяжелыми вычислениями не назовешь)) проверки в полях - это ерунда, это к работе с базой данных не относится. Но ты говорил о то, что работа с бд занимает много времени, во всяком случае я так поняла. Возможно, неправильно спроектирована бд. Она отвечает нормальной форме?
R.id.team

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

Аватара пользователя
adarash
Сообщения: 333
Зарегистрирован: 17 июл 2013, 09:59

Re: SQLiteException: database is locked

Сообщение adarash » 14 янв 2014, 14:08

третьей. Доводить до 4 или 5 я считаю излишним.

Ответить