2012-01-26 11 views
0

元々自動インクリメントで設定されていなかったSQLiteデータベースで次の最高のPKを取得しようとしていますが、すでに何百ものレコードがあります。だから私はそれがうまくいくように思える以下のメソッドを作ったが、私はこれから何か結果を得ることができません。私はデータベースからデータを取得し、私が間違っていることを理解することができず、クロスアイになっていくので、私はいくつかの助けを求めると思ったいくつかの方法があります。結果を返さない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] PRINT FIRST SUBJECT_IDは=(NULL) (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

最初の呼び出し[RST次はまた、あなたはあなたのsubject_id文字列なくint型でよろしいですか?

最後に、lastInsertRowIDを使用できるかどうかを確認しましたか?

私はこのような使用

:あなたの助けを

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

どうもありがとうございました。私はそれが何かばかげて単純だと分かっていました。初期化で問題が発生したために以前はNSStringとして使用していましたが、現在は修正されているため、NSIntegerに変換する必要はありません。私は今lastInsertRowIdを使用する方法をチェックしていますが、プライマリキーフィールドはもともと自動インクリメントとして設定されておらず、これが機能するかどうかはわかりません。 – jroyce

+0

うまくいけばうれしいです。見落としの中で最も簡単なことは、いつも私たちを邪魔します。 – Darren

1

FMDBのドキュメントから:

クエリで返された値にアクセスする前に、必ず[ - [FMResultSet next]を呼び出す必要があります。

あなたはstringForColumnIndexを呼び出す前に、ちょうどあなたのRSTメソッドを呼び出します。

+0

おかげで、これはそれを扱っ! – jroyce

関連する問題