sqlite на iphone при вставке / обновлении блокирует всю базу данных или только конкретную таблицу? - PullRequest
0 голосов
/ 05 сентября 2011

Я прочитал несколько уроков и провел поиск, но, должно быть, что-то упустил. В последние несколько дней у меня было множество разных проблем с sqlite в приложении для iphone. Наиболее распространенной проблемой был сбой, когда я выполнял вставки одновременно в разные таблицы, а не в одну и ту же.

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

Так блокирует ли БД всю БД или только таблицу, в которую я вставляю информацию?

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

Ответы [ 3 ]

1 голос
/ 06 сентября 2011

После дальнейших тестов я могу с уверенностью сказать, что вы можете одновременно выполнять несколько вставок в базу данных, если она находится в разных таблицах. Несколько вставок одновременно в одну и ту же таблицу приведут к ошибке. Сбои, которые у меня были ранее, по-видимому, связаны с тем, что я инициализировал + выделял БД для каждого представления, которое я хотел использовать, а затем выпускал его для каждого представления. После init + alloc только для делегата приложения это решало сбои. Несмотря на то, что вы можете иметь несколько экземпляров одной и той же БД во всем приложении, кажется, что предпочтительнее иметь один экземпляр в приложении «Делегат» и получать к нему доступ по мере необходимости. Возможно, это не совсем правильно, но мой вывод был сделан после нескольких часов поиска и тестирования.

Надеюсь, это поможет другим людям.

0 голосов
/ 06 сентября 2011

Вы вызываете sqlite3_finalize в нужное время, когда вы закончите? Я заметил, что отказ от вызова sqlite3_finalize в sqlite в значительной степени остановит работу.

0 голосов
/ 05 сентября 2011

Существует 5 типов блокировок, но все они связаны с целым файлом базы данных , а не с блокировкой таблицы, или не говоря уже о блокировке строки.

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