Вызов функции SQL без создания таблиц / базы данных - PullRequest
0 голосов
/ 17 января 2012

Функция HEX является одной из основных функций в sqlite

Я хотел бы вызвать функцию из моего кода Objective-C без фактического создания базы данных в моем приложении ... и т. Д.

Какой самый простой способ вызвать функцию с наименьшим добавлением классов?

Я нашел много функций, написанных на o-c, которые HEX - строка. Тем не менее, они не являются правильными, поскольку они дают результаты, отличные от функции HEX MySQL.

Решение: преобразование строки в ее шестнадцатеричное значение

+(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 ]

1 голос
/ 23 января 2012

Вы можете легко получить строку HEX из экземпляра NSDate:

NSString *tokenKey = [[[deviceToken description] stringByTrimmingCharactersInSet:
           [NSCharacterSet characterSetWithCharactersInString:@"<>"]] 
                   stringByReplacingOccurrencesOfString:@" " withString:@""];
1 голос
/ 24 января 2012

Звучит так, будто вы просто хотите преобразовать строку 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);
}
1 голос
/ 23 января 2012

Вы можете открыть базу данных в памяти с помощью sqlite3_open и использовать ее.Для этого откройте базу данных с именем файла :memory: (с двоеточиями).

Если вам нужна только шестнадцатеричная функция, вы также можете посмотреть исходный код SQLite.Это просто C и в свободном доступе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...