Зачем вставлять целое число в SQLite? - PullRequest
1 голос
/ 27 января 2012

Я получаю EXC_BAD_ACCESS в приведенном ниже операторе вставки, используя FMDB executeUpdate. Это происходит в bindObject toColumn в FMDatabase.

В операторе NSlog я получаю правильные значения, но оператор обновления взрывается. Не уверен, что я здесь делаю не так.

- (void) addSubject {

    DrillDownAppAppDelegate *appDelegate = (DrillDownAppAppDelegate *)[[UIApplication sharedApplication] delegate];

    FMDatabase *database = [FMDatabase databaseWithPath:appDelegate.getDBPath];    
    [database open];

    NSLog(@"SUBJECT_ID/TITLE/CATEGORY_TITLE = %d / %@ / %@", self.subject_id, self.title, self.category_title);

    [database executeUpdate:@"insert into SUBJECT (subject_id, subject, category) values(?, ?, ?)", 
    self.subject_id, self.title, self.category_title, nil];

    [database close];

}

Я просмотрел код FMDatabase, и похоже, что первая переменная, subject_id - это бомбардируемая. Я попробовал оба сохранения как NSInteger, а также NSNumber, и оба дали тот же сбой.

Точная строка из базы данных FMD, где происходит сбой:

    else if ([obj isKindOfClass:[NSData class]]) {

и он передает subject_id как NSInteger (или NSNumber) и выдает ошибку.

1 Ответ

2 голосов
/ 30 января 2012

FMDB инструкция executeUpdate требует, чтобы вы использовали NSNumber, а не NSInteger, поэтому преобразуйте ваш NSInteger в NSNumber как часть оператора executeUpdate, и он будет работать.Я часами искал это и наконец нашел его.

Вот пример того, как это должно выглядеть:

[database executeUpdate:@"update Subject Set subject = ?, category = ? where subject_id = ?", self.title, self.category_title, [NSNumber numberWithInt:self.subject_id]];
...