SQLite не компилирует запрос - Цель C - PullRequest
1 голос
/ 25 февраля 2012

У меня проблемы с функцией SQLite sqlite3_prepare_v2, она всегда возвращает 1 код ошибки. Я использую оболочку SQLite SQLitemanager для iOS4. Ранее та же самая ошибка произошла без использования оболочки, я переключился на нее, потому что, несмотря на то, что оператор был закодирован в UTF8, ошибка все же произошла Я проверил путь к базе данных с помощью отладчика, и он правильный, поэтому я потерян ... Кстати, база данных правильно открывается и закрывается.

Вот кусочек кода:

- (NSArray *)getRowsForQuery:(NSString *)sql {

    NSMutableArray *resultsArray = [[NSMutableArray alloc] initWithCapacity:1];

    if (db == nil) {
        [self openDatabase];
    }

    sqlite3_stmt *statement;    
    const char *query = [sql UTF8String];
    int prepareStatus = sqlite3_prepare_v2(db, query, -1, &statement, NULL);


    while (sqlite3_step(statement) == SQLITE_ROW) {

Большое спасибо за вашу помощь.

Вот параметры, передаваемые объекту-оболочке:

- (void)viewDidLoad
{
    [super viewDidLoad];

    dbManager = [[SQLiteManager alloc] initWithDatabaseNamed:@"XLO.sqlite"];

    SArray *provinciaArray = [dbManager getRowsForQuery:[NSString stringWithFormat:@"SELECT provincia FROM provincias;"]];

Спасибо!

Питер, вот оно:

- (NSError *) openDatabase {

    NSError *error = nil;

    NSString *databasePath = [self getDatabasePath];

    const char *dbpath = [databasePath UTF8String];

    #ifdef DEBUG
        NSLog(@"SQL result: <%s>", dbpath );
    #endif

    int result = sqlite3_open(dbpath, &db);
    if (result != SQLITE_OK) {
            const char *errorMsg = sqlite3_errmsg(db);
            NSString *errorStr = [NSString stringWithFormat:@"The database could not be opened: %@",[NSString stringWithCString:errorMsg encoding:NSUTF8StringEncoding]];
            error = [self createDBErrorWithDescription:errorStr andCode:kDBFailAtOpen];
    }

    return error;
}

Большое спасибо всем!

1 Ответ

1 голос
/ 25 февраля 2012

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

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

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