调用SQL函数而不创建表/数据库

时间:2012-01-17 14:56:54

标签: iphone

功能HEXsqlite

中的核心功能之一

我想从我的objective-c代码中调用该函数,而不是在我的应用程序中实际创建数据库..等等。

用最少的类添加函数来调用函数最简单的方法是什么?

我发现很多用o-c写的函数都是HEX一个字符串。但是,它们不正确,因为它们产生的结果与mysql的HEX函数不同。

解决方案:将字符串转换为其十六进制值

+(NSString *) stringToHex:(NSString *)str
{
    NSString *aResult;
    sqlite3 *database;
    if(sqlite3_open(":memory:", &database) == SQLITE_OK) 
    {
        NSString *sqlStatement = [NSString stringWithFormat:@"select HEX('%@')",str];
        sqlite3_stmt *compiledStatement;
        if(sqlite3_prepare_v2(database, [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStatement, NULL) == SQLITE_OK) {
            while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
                aResult = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)];
            }
        }
        sqlite3_finalize(compiledStatement);
    }
    sqlite3_close(database);
    return aResult;
}

3 个答案:

答案 0 :(得分:1)

您可以使用sqlite3_open打开内存中的数据库并使用它。为此,请打开文件名为:memory:(带冒号)的数据库。

如果您只想要hex函数,还可以查看SQLite的源代码。它是普通的C和公共领域。

答案 1 :(得分:1)

您可以从NSDate实例轻松检索HEX字符串:

NSString *tokenKey = [[[deviceToken description] stringByTrimmingCharactersInSet:
           [NSCharacterSet characterSetWithCharactersInString:@"<>"]] 
                   stringByReplacingOccurrencesOfString:@" " withString:@""];

答案 2 :(得分:1)

听起来你只想将NSString转换为十六进制。你可以在这里搜索一个更好的解决方案,或者这是我刚设计的一个:

+ (NSString *)stringToHex:(NSString *)string
{
    NSUInteger hexLength = ([string length] * 2) + 1;
    char *hex = (char *)malloc(sizeof(char) * hexLength);
    if (hex == NULL)
        return (@"");

    const char *cString = [string cStringUsingEncoding:NSASCIIStringEncoding];
    for (NSUInteger len = 0, pos = 0; len < [string length]; len++, pos += 2)
        snprintf(hex + pos, 3, "%2x", cString[len]);
    hex[hexLength] = '\0';

    NSString *hexString = [NSString stringWithCString:hex encoding:NSASCIIStringEncoding];
    if (hex != NULL)
        free(hex);

    return (hexString);
}