2012-01-14 25 views
4

我可以從這樣的代碼讀取所有列中的數據...我如何在IOS dev中使用FMDB從SQLite中讀取整行數據?

FMResultSet *rs = [db executeQuery:@"SELECT Name, Age, FROM PersonList"]; 

while ([rs next]) { 

NSString *name = [rs stringForColumn:@"Name"]; 

int age = [rs intForColumn:@"Age"]; 

} 

或從這樣

NSString *address = [db stringForQuery:@"SELECT Address FROM PersonList WHERE Name = ?",@"John"]; 

找到一些數據,但如果我想要一個數組內容的全部行的數據(假設所有我的行數據是一個簡單的字符串)

我該如何實現...?

感謝您的幫助!

您也可以用中文回答我,謝謝您

回答

6

上有FMResultSet類中定義的resultDict方法。我會做這樣的:

FMResultSet *rs = [db executeQuery:@"SELECT Name, Age, FROM PersonList"]; 
while ([rs next]) { 
    NSLog(@"%@", [[rs resultDict] description]); 
} 

這應該打印出類似這樣:

{ 
    Name = bbbbbird1; 
    Age = 25; 
} 

在PersonList表的每一行。現在有兩種將這些值放入數組的方法。一種是使用allValues方法NSDictionary,但是列的順序很可能會被破壞。另一種方式是建立自己的數組:

FMResultSet *rs = [db executeQuery:@"SELECT Name, Age, FROM PersonList"]; 
while ([rs next]) { 
    NSMutableArray* rowData = [[NSMutableArray alloc] init]; 
    for(int i=0; i<[s columnCount]; i++) { 
     [rowData addObject:[[rs resultDict] objectForKey:[[rs columnNameForIndex:i] lowercaseString]]; 
    } 
    NSLog(@"%@", [rowData description]); 
} 

以上應打印:

(
    bbbbbird1, 
    25 
) 

我希望這是你在找什麼。如果您需要將行作爲陣列存儲在應用中的許多位置,則可以將此代碼放入FMResultsSet類別中。

+0

感謝您的幫助^^ 它的作品! – bbbbbird1 2012-01-18 06:49:29

2

接受的答案是偉大的,但有一種優雅的方式來實現OP給的例子:

FMResultSet *rs = [db executeQuery:customQuery]; 
while ([rs next]) { 
    NSString* tempName = [rs objectForColumnName:@"someColumnName"]; 
} 

按照objectForColumnName文檔返回值:

無論的NSNumber,NSString的, NSData或NSNull。如果該列爲NULL,則返回[NSNull null]對象。

所以它可以用一種方法實現(假設你知道你的數據庫的類型)。

此外,如果你正在尋找一個包含類對象的自定義數組你可以結合他們兩個:

FMResultSet *rs = [db executeQuery:customQuery]; 
while ([rs next]) { 
    someCustomClassName *tempClass = [[someCustomClassName alloc] init]; 
    [tempClass setSomePropertyValue:[rs objectForColumnName:@"someColumnName"]; 
    [someArray addObject:tempClass]]; 
} 
相關問題