2015-04-01 3 views
0

Моя проблема в том, что я не могу получить значения из запроса select при выполнении ошибки 101.SQLite Query statement - Objective C

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

sqlite3 * базы данных;

NSString * path = [[[ NSBundle mainBundle ]resourcePath ] stringByAppendingPathComponent : @"cars.sqlite"]; 
int returnCode = sqlite3_open ([ path cStringUsingEncoding : NSUTF8StringEncoding], &database) ; 

sqlite3_stmt * statement ; 
char * st ; 
NSString *querySQL = [NSString stringWithFormat: @"select brand,model from cars where brand=%@;", tmpbrand]; 

const char *query_stmt = [querySQL UTF8String]; 
st = sqlite3_mprintf (query_stmt); 

if(sqlite3_prepare_v2 (database , query_stmt , -1 ,& statement ,NULL)==SQLITE_OK){ 
returnCode = sqlite3_step (statement) ; // this statement returns a record 

while (returnCode == SQLITE_ROW) // while there are rows 
{ 
    models*tmp=[[models alloc]init]; 

    char* n=(char*)sqlite3_column_text(statement,0); 
    tmp=[NSString stringWithCString:n encoding:NSUTF8StringEncoding]; 
    char* model=(char*)sqlite3_column_text(statement, 1); 
    tmp.model=[NSString stringWithCString:model encoding:NSUTF8StringEncoding]; 


    [data addObject:tmp]; 

    returnCode = sqlite3_step (statement) ; // this statement returns a record 

} 
    sqlite3_finalize(statement); 
} 

}

ответ

1

Быстрый взгляд на the documentation показывает, что ошибка 101 означает, что "сделано".

Код результата SQLITE_DONE указывает, что операция завершена.

Если вы не получаете строки, которые вы ожидаете, вы правы, это, вероятно, ваш запрос. Чтобы заставить его работать, вам, вероятно, нужно поставить одинарные кавычки вокруг '%@'.

Однако это неправильный способ сделать это. Вы должны использовать подготовленные заявления. То есть ваш запрос выглядит как select brand,model from cars where brand=?, и вы заполняете значения, используя функцию bind.

+0

Я попытался сделать это с одинарной кавычкой, и я не смог заставить ее работать. Если это возможно, чтобы показать мне, как это сделать, используя подготовленные заявления .. Im довольно нищий в этом .. –

+0

Вот первая ссылка в поиске Google для «объектного c sqlite подготовленного заявления»: http://stackoverflow.com/q/1187154/2998 –