使用FMDB从sqlite DB创建字典数组

时间:2012-02-21 03:45:52

标签: objective-c cocoa sqlite fmdb

我是objective-c的新手,我正在尝试创建一个字典数组,以便在具有三列的NSTableView中查看它们。 sqlite DB模式在名为“tbl1”的表中也有三列,“foo”,“bar”和“foobar”。我使用FMDB作为包装器,我可以成功编写和查询。

我可以使用以下方法为整个数据库创建一个数组:

FMResultSet *rs = [db executeQuery:@"select * from tbl1"];

我可以用这个创建一个字典:

dict = [[NSMutableDictionary alloc] init];
[dict setObject: @"baz"        
      forKey: @"foo"];

阅读数据库中的每个项目:

while ([rs next]) {
    NSLog(@"%@, %@, %@", 
          [rs stringForColumn:@"foo"],
          [rs stringForColumn:@"bar"],
          [rs stringForColumn:@"foobar"]);
    }

然而,我似乎无法创建单个NSMutableDictionaries数组,因此我可以将它们读入基于单元格的表视图中。我能够使用标识符“foo”填充单个列,其值为“foo”,但是,这只是通过从SQL查询中生成“foo”项的数组:

FMResultSet *rs = [db executeQuery:@"select * from tbl1"];
    while([foo next]) {
        NSString *thisFoo = [foos stringForColumn:@"foo"];        
        [_foos addObject:[NSString stringWithFormat:@"%@", thisFoo]];
    }
    NSLog(@"Foos: %@", _foos);

作为附注,如果我想稍后更新数据库,我应该使用可变数组和可变字典?或者无所谓,因为我必须查询整个数据库以刷新表视图? 任何有关如何使用三列sqlite DB填充三列tableview的建议都值得赞赏 - 以及对我对FMDB或tableviews的理解的更正。

2 个答案:

答案 0 :(得分:1)

FMResultSet *rs = (FMResultSet*)[db executeQuery:@"select * from tbl1"];
NSMutableArray *totalArray = [[[NSMutableArray alloc]init]autorelease];
while ([rs next]) {
dict = [[NSMutableDictionary alloc] init];
[dict setObject:[rs stringForColumn:@"foo"] forKey:@"COL1"];
[dict setObject:[rs stringForColumn:@"bar"] forKey:@"COL2"];
[dict setObject:[rs stringForColumn:@"foobar"] forKey:@"COL3"];
[totalArray addObject:dict];
[dict release];
}
return totalArray;

应该为您提供字典数组

答案 1 :(得分:0)

瑞克,你的问题对我来说没什么意义。请对其进行编辑,以便清楚地指出您的确切问题。

对于FMDB,请查看此处给出的示例代码:https://github.com/ccgus/fmdb/zipball/master

在此处阅读Apple的NSTableViewDelegate协议文档:https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSTableViewDelegate_Protocol/Reference/Reference.html

此示例代码:https://developer.apple.com/library/mac/#samplecode/CocoaTipsAndTricks/Introduction/Intro.html#//apple_ref/doc/uid/DTS40010039也应该有帮助。