元々自動インクリメントで設定されていなかった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
どうもありがとうございました。私はそれが何かばかげて単純だと分かっていました。初期化で問題が発生したために以前はNSStringとして使用していましたが、現在は修正されているため、NSIntegerに変換する必要はありません。私は今lastInsertRowIdを使用する方法をチェックしていますが、プライマリキーフィールドはもともと自動インクリメントとして設定されておらず、これが機能するかどうかはわかりません。 – jroyce
うまくいけばうれしいです。見落としの中で最も簡単なことは、いつも私たちを邪魔します。 – Darren