如何在IOS dev中使用FMDB从SQLite读取整行数据?

如何在IOS dev中使用FMDB从SQLite读取整行数据?,ios,sqlite,fmdb,Ios,Sqlite,Fmdb,我可以从这样的代码中读取所有列数据 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 stringFor

我可以从这样的代码中读取所有列数据

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"];
但是,如果我想要一个数组包含整行的数据(假设我所有的行数据都是一个简单的字符串)

我怎样才能做到

谢谢你的帮助

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

在FMResultSet类上定义了ResultDisct方法。我会这样做:

FMResultSet *rs = [db executeQuery:@"SELECT Name, Age, FROM PersonList"];
while ([rs next]) {
    NSLog(@"%@", [[rs resultDict] description]);
}
这应该打印如下内容:

{
    Name = bbbbbird1;
    Age = 25;
}
对于PersonList表中的每一行。现在有两种方法将这些值放入数组。一种是使用NSDictionary的allValues方法,但是列的顺序很可能会被打破。另一种方法是自己构建阵列:

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]);
}

我希望这就是你要找的。如果您需要在应用程序中的许多位置将行作为数组,则可以将此代码放入FMResultSet类别。

公认的答案很好,但有一种优雅的方法可以实现OP给出的示例:

FMResultSet *rs = [db executeQuery:customQuery];
while ([rs next]) {
   NSString* tempName = [rs objectForColumnName:@"someColumnName"];
}
根据文档,返回值为:

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]];
}
FMResultSet *rs = [db executeQuery:customQuery];
while ([rs next]) {
   someCustomClassName *tempClass = [[someCustomClassName alloc] init];
   [tempClass setSomePropertyValue:[rs objectForColumnName:@"someColumnName"];
   [someArray addObject:tempClass]];
}