【问题标题】:Insert NSArray with diffrent types into sqlite database?将具有不同类型的 NSArray 插入 sqlite 数据库?
【发布时间】:2013-05-12 07:54:06
【问题描述】:

嘿,我有一个关于将数据插入 sqlite 数据库的问题。我想创建用于将数据插入 sqlite 数据库的通用类。所以我写了一个这样的方法:

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

       char *sql= &sqlstmnt;

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

}

现在我的问题是给定的数组“值”可以由不同的类发送,并且每次调用此方法时该数组的内容都不同。它包含 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]);
}

如果有人能帮助我,那就太好了。

因为我需要它的类型

【问题讨论】:

  • 为什么不使用FMDB 库?其中已经包含 - (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments 之类的方法。

标签: objective-c database sqlite nsarray


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2018-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    相关资源
    最近更新 更多