Я пытаюсь получить следующий самый высокий PK в базе данных SQLite, которая изначально не была настроена с автоматическим приращением и уже имеет сотни записей. Поэтому я сделал метод ниже, который, похоже, должен работать, но я не могу получить никаких результатов. У меня есть несколько других методов, которые получают данные из базы данных, которые работают, и не могут понять, что я делаю неправильно, и я иду скрестив глаза, поэтому подумал, что попрошу о помощи.Запрос с использованием FMDB, не возвращающий результат
- (NSInteger)getNextSubjectId {
DrillDownAppAppDelegate *appDelegate = (DrillDownAppAppDelegate *)[[UIApplication sharedApplication] delegate];
FMDatabase *database = [FMDatabase databaseWithPath:appDelegate.getDBPath];
[database open];
FMResultSet *rst = [database executeQuery:@"select max(subject_id) + 1 AS SUBJECT_ID from SUBJECT"];
NSLog(@"PRINT FIRST SUBJECT_ID = %@", [rst stringForColumnIndex:0]);
NSString *nextSubId = [rst stringForColumnIndex:0];
[database close];
NSLog(@"NEW SUBJECT_ID = %@", nextSubId);
NSInteger myInt = [nextSubId intValue];
return myInt;
// [maxSubjectId release];
}
В журнале показывает:
2012-01-25 22: 56: 29.398 Котировки [6992: F803] ПЕЧАТЬ ПЕРВЫЙ subject_id = (нуль) (GDB)
Заголовок выглядит как это:
// Subject.h
// DrillDownApp
#import <UIKit/UIKit.h>
@interface Subject : NSObject {
NSInteger subject_id;
NSString *category_title;
NSString *title;
BOOL isDirty;
}
- (id) initWithPrimaryKey:(NSInteger)pk;
- (void) addSubject;
- (NSInteger)getNextSubjectId;
@property (nonatomic, readwrite) BOOL isDirty;
@property (nonatomic, readonly) NSInteger subject_id;
@property (nonatomic, retain) NSString * title;
@property (nonatomic, retain) NSString * category_title;
@end
Большое спасибо, и это исправлено. Я знал, что это было что-то глупое. Раньше у меня было это как NSString из-за проблем с инициализацией, но теперь они исправлены, поэтому он сразу переходит к NSInteger без необходимости его преобразования. Я проверяю, как использовать lastInsertRowId сейчас, но мое основное ключевое поле не было настроено первоначально как автоматическое приращение и не было уверенным, что это сработает. – jroyce
Рад, что у вас это работает. Простейшие оплошности всегда вызывают нас. – Darren