IPhone - создать базу данных в памяти - PullRequest
0 голосов
/ 24 августа 2011

sqlite может создавать базу данных в памяти, но возможно ли это сделать в iPhone?

В этом документе указано, что в sqlite http://www.sqlite.org/inmemorydb.html

Я пытался, но потерпел неудачу. Он успешно создал базу данных, но не смог создать таблицу. Ниже мой код:

-(BOOL) open{

    NSString *path = @"";
    if(sqlite3_open([path UTF8String], &database_) == SQLITE_OK) {
        //bFirstCreate_ = YES;
        NSLog(@"open == YES");
        [self createChannelsTable:database_];
        return YES;
    } else {
        sqlite3_close(database_);
        NSLog(@"Error: open database file.");
        return NO;
    }
    return NO;
}


- (BOOL) createChannelsTable:(sqlite3*)db{

    NSString *comment = [[NSString alloc] init];
    comment = @"CREATE TABLE Temp(Name text, Address text}";
    sqlite3_stmt *statement;
    if(sqlite3_prepare_v2(db, [comment UTF8String], -1, &statement, nil) != SQLITE_OK) {
        NSLog(@"Error: failed to prepare statement:create channels table");
        return NO;
    }
    int success = sqlite3_step(statement);
    sqlite3_finalize(statement);
    if ( success != SQLITE_DONE) {
        NSLog(@"Error: failed to dehydrate:CREATE TABLE channels");
        return NO;
    }
    NSLog(@"Create table 'channels' successed.");

    return YES;
}

1 Ответ

0 голосов
/ 24 августа 2011

Возможно, вы пропустили точку с запятой в командной строке SQL и неверное окончание '}' вместо ')'?

comment = @"CREATE TABLE Temp(Name text, Address text}";

Нужна точка с запятой после "Address text}", поэтому она становится:

comment = @"CREATE TABLE Temp(Name text, Address text);";

Я думаю, вы также получаете утечку памяти при создании "комментария" NSString. Вы инициализируете его, а затем указали указателю комментария на сохранение другой строки при использовании оператора assign.

Вы можете сделать эти два шага в 1 следующим образом:

NSString *comment = [[NSString alloc] initWithString:@"CREATE TABLE Temp(Name text, Address text}";
...