2012-01-14 1 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方法があります。私はこのようにそれを行うだろう:PersonListテーブル内の行ごとに

{ 
    Name = bbbbbird1; 
    Age = 25; 
} 

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

このような何かを印刷する必要があります。これらの値を配列に入れるには2つの方法があります。 1つは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

2

受け入れ答えは素晴らしいですが、OPが与えた例を達成するためのエレガントな方法があります:

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

objectForColumnNameドキュメント戻り値によると:

どちらかのNSNumber、NSStringの、 NSData、またはNSNull。カラムがNULLの場合、これは[NSNull null]オブジェクトを返します。

これは、1つの方法で達成できます(DBの種類がわかっていると仮定します)。あなたの助け^^それが動作 ため

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