Sqlite создать базу данных

Я новичок в sqlite, и я уже пару дней пытаюсь следовать учебному пособию, но он не хочет добавлять свою базу данных и таблицу. Это дает мне предупреждение, что я сделал, если таблица не добавлена. "СТОЛ не был создан"

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

viewcontroller.h

@property (retain, nonatomic) NSString *databaseName, *tableName;
@property (readwrite, nonatomic) int numberOfRows;
@property (readwrite, nonatomic) NSMutableArray *dataList;
@property (readwrite, nonatomic) BOOL table_ok, db_open_status;
@property (retain, nonatomic) NSArray *my_columns_names; 

viewcontroller.h

[super viewDidLoad];
dataList = [[NSMutableArray alloc]init];
numberOfRows = 0;
databaseName = @"mysampledatabase";
tableName = @"mypeople";
db_open_status = NO;
table_ok = NO;
my_columns_names = [[NSArray alloc]initWithObjects:@"hometeam",@"awayteam",@"homeplayers",@"homefouls",@"awayplayers",@"awayfouls",@"period",@"time",@"homescore",@"awayscore", nil];
if ([self openDBWithSQLName:databaseName]) {
    db_open_status = YES;
    if (![self createTable:tableName WithCoulumns:my_columns_names]) {
        UIAlertView *av = [[UIAlertView alloc]initWithTitle:@"Warning" message:@"the TABLE has not been created" delegate:self cancelButtonTitle:@"ok" otherButtonTitles:nil, nil];
        [av show];
    } else {
        table_ok = YES;
    }
}


-(BOOL)openDBWithSQLName:(NSString *)sqlname{
    BOOL is_Opened = NO;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *my_sqlfile = [[paths objectAtIndex:0] stringByAppendingPathComponent:sqlname];
    if (sqlite3_open([my_sqlfile UTF8String], &dbname) ==SQLITE_OK) {
        is_Opened = YES;
    }
    return is_Opened;

}


-(BOOL)createTable:(NSString *)tablename WithCoulumns:(NSArray *)columnNames{
    BOOL has_beencreated = NO;
    NSString *fieldset = @"";
    char *err;
    for (int a=0; a<[columnNames count]; a++){

        NSString *columnSet = [NSString stringWithFormat:@"'%@' TEXT", [columnNames objectAtIndex:a]];
        fieldset = [fieldset stringByAppendingString:columnSet];
        if (a<([columnNames count]-1)) {
            fieldset = [fieldset stringByAppendingString:@" ,"];
        }

    }
    NSString *sql = [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS '%@' (ID INTEGER PRIMARY KEY AUTOINCREMENT,%@", tableName, fieldset];
    if (sqlite3_exec(dbname, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
        sqlite3_close(dbname);
    } else {
        has_beencreated = YES;
    }
    return has_beencreated;
}

1 ответ

Решение

Я думаю, что выяснил проблему с сообщением "ТАБЛИЦА не была создана", которое вы получаете (я тоже!). В методе createTable: непосредственно перед назначением *sql, если вы добавите этот код:fieldset=[fieldset stringByAppendingString:@")"];

fiedlset выполняется с закрывающей скобкой, которую он пропускает. Вы можете проверить это самостоятельно, поставив точку останова чуть ниже:

has_beencreated = YES;

запустите приложение и проверьте переменную &err

Надеюсь, поможет!

Другие вопросы по тегам