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
Надеюсь, поможет!