2012-01-26 249 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 =(空) (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之前只需撥打首先下一個方法。

+0

感謝您的幫助,這個處理吧! – jroyce