Запрос с использованием FMDB не возвращает результат - PullRequest
0 голосов
/ 26 января 2012

Я пытаюсь получить следующий по величине PK в базе данных SQLite, который изначально не был настроен с автоматическим приращением и уже имел сотни записей. Таким образом, я сделал следующий метод, который, кажется, должен работать, но я не могу получить никаких результатов от этого. У меня есть несколько других методов, которые получают данные из базы данных, которые работают, и я не могу понять, что я делаю неправильно, и я собираюсь косоглазие, поэтому подумал, что я буду просить некоторую помощь.

- (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] PRINT FIRST SUBJECT_ID = (пусто) (ГБД)

Заголовок выглядит так:

//  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

Ответы [ 2 ]

1 голос
/ 26 января 2012

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

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

Просто вызовите метод next на вашем rst , прежде чем вызывать stringForColumnIndex .

0 голосов
/ 26 января 2012

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

Кроме того, вы уверены, что subject_id - это строка , а не int ?

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

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

int lastRow = [[self getDatabase]lastInsertRowId];
...