Sqlite3 выдает ошибку «нет такой таблицы» на iPhone - PullRequest
3 голосов
/ 23 марта 2009

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

Но когда я добавляю эту базу данных в ресурсы приложения iPhone и пытаюсь получить доступ к данным программно, я получаю сообщение об ошибке: "нет такой таблицы: имя таблицы"

Почему это происходит?

Ответы [ 3 ]

8 голосов
/ 24 марта 2009

sqlite3_open () создает для вас пустую базу данных, если путь к базе данных не существует. Таким образом, возможно, что указанный вами путь не приведет вас к намеченному файлу. С пустой базой данных вы часто получаете «нет такой таблицы».

0 голосов
/ 06 июня 2009

У меня была такая же ошибка с оболочкой sqlite3X C ++. Я использую эту библиотеку в своем IE-плагине. Проблема была в недоступности .sqlite base. Текущий каталог для IE (не для плагина): «C: \ Documents and Settings \ Имя пользователя \ desktop \». Когда я разместил свою базу в этом месте - проблема была решена.

0 голосов
/ 23 марта 2009

Файл БД, вероятно, недоступен для iPhone. Попробуйте создать БД из самого приложения для iPhone.

NSArray *paths = NSSearchPathForDirectoriesInDomains(
                    NSDocumentDirectory, NSUserDomainMask, YES
                 );
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [
      documentsDirectory stringByAppendingPathComponent:@"yourdbname.sql"
];
// Open the database. The database was prepared outside the application.
if (sqlite3_open([path UTF8String], &db_handle) != SQLITE_OK) {
    // Even though the open failed, 
    // call close to properly clean up resources.
    sqlite3_close(db_handle);
    NSAssert1(0, 
         @"Failed to open database with message '%s'.", 
         sqlite3_errmsg(db_handle)
    );
}

И снова выполните ваш запрос. Также полезно, если вы проверяете наличие потенциальных ошибок на каждом шаге кода доступа к БД.

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