2013-05-17 66 views
0

嘿,我有一個關於將數據插入sqlite數據庫的問題。我想創建一個用於將數據插入到sqlite數據庫的通用類。所以我寫了這樣的方法:將不同類型的NSArray插入到sqlite數據庫中?

-(void)saveData:(char)sqlstmnt andValues:(NSArray *)Values { 

     char *sql= &sqlstmnt; 

     sqlite3_prepare_v2(database, sql, -1, &statement, NULL); 

} 

現在我的問題是給定Array「值」可以由不同的類來發送和數組的內容是不同勢每次調用此方法時。它包含int,bool,float,text。那麼有沒有一種方法或一種方法可以「掃描」類型的一部分數組? 類似:

if ([Values objectAtIndex:i isINT]) { 
    sqlite3_bind_int(statement, i, [Values objectAtIndex:i]); 
} 

if ([Values objectAtIndex:i isFLOAT]) { 
    sqlite3_bind_float(statement, i, [Values objectAtIndex:i]); 
} 

if ([Values objectAtIndex:i isAnBOOL]) { 
    sqlite3_bind_bool(statement, i, [Values objectAtIndex:i]); 
} 

這將是巨大的,如果有人可以幫助我這一點。

,因爲我需要的那種類型的它

+0

爲什麼不使用[FMDB(https://github.com/ccgus/fmdb)庫?它包含了像' - (BOOL)executeUpdate:(NSString *)sql withArgumentsInArray:(NSArray *)arguments'這樣的方法。 –

回答

1

使用isKindOfClass:objCType

id object = ... 

if ([object isKindOfClass:[NSString class]]) { 
    // object is a string 
} 
else if ([object isKindOfClass:[NSNumber class]]) { 
    if (strcmp([object objCType], @encode(BOOL)) == 0) { 
     // bool 
    } 
    else if (strcmp([object objCType], @encode(int)) == 0) { 
     // int 
    } 
    else if (strcmp([object objCType], @encode(float)) == 0) { 
     // float 
    } 
    else if (strcmp([object objCType], @encode(double)) == 0) { 
     // double 
    } 
    // and so on 
} 
相關問題