| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets > database is locked Unable to fetch row SQLite |
| Автор: Lindemann66 7.10.2011, 10:40 | ||
| Всем привет! Следующая проблема Программа, аналог UpdateScannera'a в FireFox Цель - сканировать сайты на предмет наличия новых ссылок Допустим, добавили 10 сайтов, и в начальный момент времени все они запускаются на анализ и в базу добавляется порядка 300 ссылок по каждому сайту, притом - параллельно и с использованием транзакций для усорения работы Итого порядка 3000 - 4000 вставок по 300-400 параллельных Как следует из сабжа, бд - SQLite Проблема - БД, судя по всему блокируется на время транзакции, и прога выкидывает ошибку: database is locked Unable to fetch row Собственно, такая ошибка может появляться и при каких-то других случаях, суть в том, что база лочится, и это ведёт к ошибке Вопрос Как обойти эту проблему, какие варианты решения Вы знаете? P.S. Пробовал
Буду благодарен за любые советы! |
| Автор: Lindemann66 7.10.2011, 14:59 | ||
| В-общем, использую такое временное решение ) Вы удивитесь) Итааак.....
Смысл: если запрос не выполняется сразу, пишем сообщение об ошибке в лог файл функцией errorMessage, и запускаем выполнение команды до тех пор, пока она не выполнится (в нашем случае она будет пытаться выполняться до тех пор, пока база не разлочится) Такой вот аналог мутексов Если вдруг будет допущена ошибка в SQL запросе - мы узнаем об этом через лог |
| Автор: borisbn 7.10.2011, 15:04 |
| Lindemann66, в твоём случае лучше использовать одну транзакцию, а делать commit раз в 100 (или лучше в config.commitCount()) записей. |