通過表名獲取列名,封裝數據[FMResultSet]


手機終端開發中,經常會遇到和后台進行大量數據交互的情況,通常情況是json串或者xml串,通常這種key-value形式的數據怎樣封裝對應到數據表對應的對象呢?

FMDataBase中FMResultSet提供了一個實例方法:

- (void)setupColumnNames {

if (!columnNameToIndexMap) {
[self setColumnNameToIndexMap:[NSMutableDictionary dictionary]];
}

int columnCount = sqlite3_column_count(statement.statement);

int columnIdx = 0;
for (columnIdx = 0; columnIdx < columnCount; columnIdx++) {
[columnNameToIndexMap setObject:[NSNumber numberWithInt:columnIdx]
forKey:[[NSString stringWithUTF8String:sqlite3_column_name(statement.statement, columnIdx)] lowercaseString]];
}
columnNamesSetup = YES;
}

在這個方法中,對數據庫表的列名建立了索引,即可以通過表名,來獲取一個FMResultSet對象,進而來建立列名的所以,從而獲取到列。

以下是我一個封裝的方法:

//根據表名封裝數據
- (NSString *) packingSyncDataByTableName:(NSString *) tableName
{
NSString *theSql=[NSString stringWithFormat:PACKING_DATA_SQL,tableName];
packedSyncData = [[@"\"" stringByAppendingString:tableName] stringByAppendingString:@"\":"];
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
FMDatabase *database = [[appDelegate fmdb] retain];
FMResultSet *resultSet=[database executeQuery:theSql];
[resultSet setupColumnNames];
// [resultSet resultDict];
NSEnumerator *columnNames = [resultSet.columnNameToIndexMap keyEnumerator];
NSString *tempColumnName= nil;
NSMutableArray *columnNameArray = [[[NSMutableArray alloc] init] autorelease];
while ((tempColumnName = [columnNames nextObject]))
{
[columnNameArray addObject:tempColumnName];
}
NSMutableArray *syncArray = [[[NSMutableArray alloc] init] autorelease];
NSString *columnName = nil;
while ([resultSet next])
{
NSMutableDictionary *syncData = [[[NSMutableDictionary alloc] init] autorelease];
for(int i =0;i<columnNameArray.count;i++)
{
columnName = [columnNameArray objectAtIndex:i];
NSString *columnValue = [resultSet stringForColumn: columnName];
if (columnValue==nil) {
columnValue=@"";
}
[syncData setObject:columnValue forKey:columnName];
}
[syncArray addObject:syncData];
}
if ([syncArray count]==0) {
return nil;
}
packedSyncData =[packedSyncData stringByAppendingString:[syncArray JSONRepresentation]];
NSLog(@"The packed sync Data is:%@",packedSyncData);
return packedSyncData;
}





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM