SQLite работает на устройстве, но не в симуляторе.Ошибка sqlite3_prepare_v2 - PullRequest
0 голосов
/ 02 февраля 2011

У меня проблемы с SQLite на симуляторе iPhone.Я сократил его до простого тестового приложения.Ошибка sqlite3_prepare_v2.Но реальное устройство работает отлично.

Я создал базу данных, используя sqlite3, и добавил ее к своим ресурсам.В моем коде в viewDidLoad я вызываю createEditableCopyOfDatabaseIfNeeded (это распространенный, широко используемый метод, встречающийся повсюду).И тогда я вызываю следующее: -

- (void) queryDatabase {

    sqlite3 *database;

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"myDatabase.sql"];
    if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) {

        NSMutableString *result = [[NSMutableString alloc] init]; 
        const char *sqlStatement = "select * from people";
        sqlite3_stmt *compiledStatement;
        if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {

            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
            NSString *firstname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
            NSString *surname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
            [result appendFormat:@"%@ %@\n", firstname, surname];
        }
    [resultView setText:result];
    }
    else {
        [resultView setText:@"Problem querying database"];
    }

    sqlite3_finalize(compiledStatement);
    [result release];

    }

    sqlite3_close(database);
}

На симуляторе sqlite3_prepare_v2 не возвращает SQLITE_OK

Ответы [ 3 ]

3 голосов
/ 02 февраля 2011

Подскажите, пожалуйста, какую ошибку вы получаете? Чтобы найти ошибку, вы можете использовать

    if (sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) != SQLITE_OK) {
    NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(database));
1 голос
/ 02 февраля 2011

Убедитесь, что вы удалили значок приложения из симулятора и очистите все цели перед сборкой и запуском . Это, вероятно, решит ваши проблемы.

0 голосов
/ 23 июля 2013

Удаление приложения из симулятора, и переустановка может работать.

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