2010-04-04 2 views
0

Я новичок в использовании sqlite, поэтому я, возможно, пропустил что-то основное.sqlite на iphone может открыть db, но не готовить заявления

Я создал базу данных и скопировал ее в каталог документа моего приложения. Я могу открыть его, но когда я звоню в sqlite3_prepare_v2, я получаю SQLITE_ERROR, «Ошибка SQL или отсутствующая база данных».

вот мой код:

sqlite3 *database; 
if(sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) 
{ 
    sqlite3_stmt *compiledStatement; 
    NSString *sqlStatement = @"select * from dbname"; 
    int result = sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, &compiledStatement, nil); 
    ... 
} 

тот же оператор SQL работает в терминале.

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

Edit:

Понял работать с помощью диспетчера SQLite Firefox, была проблема с файлом базы данных, созданной с помощью терминала.

+0

Что 'держать dbPath'? –

+0

dbPath - это путь к файлу базы данных sqlite, который находится в области документов приложения. – jan

ответ

0

Поскольку вы используете sqlite3_open, новая пустая база данных будет автоматически создана, если она еще не существует в данном месте в . Если вы используете sqlite3_open_v2, вы можете управлять им, чтобы просто открыть существующую базу данных, а не создавать ее, если она отсутствует. Просто передайте флаг SQLITE_OPEN_READWRITE в третьем параметре.

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

Надеется, что это помогает,

Клауса

+0

Спасибо, я держу пари, что это было так, вероятно, это открытие нового db вместо моего файла sqlite. – jan

Смежные вопросы