2012-01-26 4 views
0

Я пытаюсь получить следующий самый высокий 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 

ответ

0

Первый вызов [первый следующий]

Кроме того, вы уверены, что ваш subject_id является строка и не INT?

И, наконец, вы видели, можете ли вы использовать lastInsertRowID?

Я использую как это:

int lastRow = [[self getDatabase]lastInsertRowId]; 
+0

Большое спасибо, и это исправлено. Я знал, что это было что-то глупое. Раньше у меня было это как NSString из-за проблем с инициализацией, но теперь они исправлены, поэтому он сразу переходит к NSInteger без необходимости его преобразования. Я проверяю, как использовать lastInsertRowId сейчас, но мое основное ключевое поле не было настроено первоначально как автоматическое приращение и не было уверенным, что это сработает. – jroyce

+0

Рад, что у вас это работает. Простейшие оплошности всегда вызывают нас. – Darren

1

Из документации FMDB:

Вы должны всегда вызывать - [FMResultSet next] перед тем, как попытаться получить доступ к значениям, возвращаемым в запросе, даже если вы их только ожидаете.

Просто позвоните на следующий метод на вашем первый перед вызовом stringForColumnIndex.

+0

Спасибо за вашу помощь, и это справились! – jroyce

Смежные вопросы