Соединение iPhone SQLite в доменном объекте - закрывать каждый раз? - PullRequest
0 голосов
/ 02 апреля 2010

У меня есть то, что я считаю небольшим приложением для iPhone, использующим SQLite.

Существует объект с одним доменом, который получает данные из базы данных SQLite.

Лучше ли создавать и открывать соединение SQLite для каждого запроса или открывать БД один раз и удерживать его в течение всего времени работы приложения.

Причиной приложения является объект домена, поэтому другим объектам БД не понадобится.

1 Ответ

1 голос
/ 03 апреля 2010

Как правило, я бы открывал базу данных только один раз и держал ссылку на нее в вашем одноэлементном объекте. От того, насколько это сильно зависит от производительности, зависит то, как часто вы будете делать запросы. Если вы запрашиваете данные для каждой ячейки в tableView, например, я бы ожидал, что открытие базы данных только один раз будет иметь большое значение.

Открыв только один раз, вы также можете сохранить в своем синглтоне ссылки на подготовленные операторы SQL, чтобы вам не приходилось каждый раз их компилировать. Каждый раз, когда вы делаете запрос, сначала проверяйте, подготовлен ли уже составленный отчет. Если нет, вы вызываете sqlite3_prepare_v2, чтобы скомпилировать его и сохранить полученный оператор в своем синглтоне.

if (request_stmt == nil) {
    const char *sql = "SELECT ...... WHERE xxx LIKE ?";
    sqlite3_prepare_v2(sqldb, sql, -1, &request_stmt, NULL);
}

Вы можете освободить эти операторы, вызвав sqlite3_finalize при освобождении вашего синглтона.

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