запрос выбора Sqlite Objective C iphone - PullRequest
2 голосов
/ 03 декабря 2009

ну у меня проблемы с запросами, я не знаю почему !! пожалуйста помогите

Я пытаюсь выбрать идентификатор из таблицы с именем moneda, и я даю имя как параметр,

это мой метод с моим запросом:

-(int)ConsultaIdMoneda:(NSString*) nombreMonedaParametro
{
    int idMonedaObtenido;
    NSLog(@" entre a consultar id de la moneda desde el app delegate");
    sqlite3 *database;

    const char *path = [[[NSBundle mainBundle] pathForResource:@"database2" ofType:@"sqlite"] UTF8String];
    if(sqlite3_open(path, &database) == SQLITE_OK)      
    {
        const char *sqlStatement =[[NSString stringWithFormat:@"Select idMoneda from moneda Where nombre = %@",nombreMonedaParametro] cStringUsingEncoding:NSUTF8StringEncoding];

        NSLog(@"%s",sqlStatement);
        sqlite3_stmt *compiledStatement;
        NSInteger result = sqlite3_prepare_v2(database,sqlStatement, -1, &compiledStatement, NULL);
        NSLog(@"%s",sqlStatement);
        if(result == SQLITE_OK) 
        {
            idMonedaObtenido = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)] intValue];
        }
        else
        {
            NSAssert1(0, @"Error . '%s'", sqlite3_errmsg(database));            
        }
        sqlite3_reset(compiledStatement);
        sqlite3_finalize(compiledStatement);
    }

    sqlite3_close(database);
    return idMonedaObtenido;        
}

и это ошибка:

2009-12-03 00:28:45.715 BCDTravel[1220:20b] *** Assertion failure in -[BCDTravelAppDelegate ConsultaIdMoneda:], /Users/Mely/Desktop/BCDTravel version 45/Bcd/Classes/BCDTravelAppDelegate.m:101
2009-12-03 00:28:45.717 BCDTravel[1220:20b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Error haciendo el select. 'no such column: euros''

Я думаю, что проблема в этой строке, но я не знаю, как выдвигать предложения, пожалуйста !!

const char *sqlStatement =[[NSString stringWithFormat:@"Select idMoneda from moneda Where nombre = %@",nombreMonedaParametro] cStringUsingEncoding:NSUTF8StringEncoding];

Ответы [ 2 ]

6 голосов
/ 03 декабря 2009

Поскольку вы передаете символьное значение, вам нужно заключить в кавычки параметр в SQL.

Например:

SELECT idMoneda
FROM   moneda
WHERE  nombre = '%@'

В противном случае, когда SQL компилируется, передаваемое вами значение само обрабатывается как имя столбца (евро) вместо значения-кандидата столбца nombre.

Предложите вам изучить использование подготовленных операторов, а не собирать строку «вручную». См. этот связанный вопрос SO .

0 голосов
/ 06 декабря 2012

Если в запросе выбора есть специальные символы, используйте NSUTF8StringEncoding вместо NSASCIIStringEncoding.

NSString *s = @"select * from AddressGeocode where address like 'São Paulo, Brazil'";

const char *sqlStatement = [s cStringUsingEncoding:NSUTF8StringEncoding];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...