#sqlite
Вопрос:
NSString *cityInput = cityField.text; NSString *code = @""; NSString *query = @"SELECT code FROM country WHERE cityname = UPPER(?)"; sqlite3_stmt *statement; if (sqlite3_prepare_v2(database, [query UTF8String],-1, amp;statement, nil) == SQLITE_OK) { sqlite3_bind_text(statement, 1, [cityInput UTF8String], -1, SQLITE_STATIC); while(sqlite3_step(statement) == SQLITE_ROW) { code = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]; } } if(sqlite3_step(statement) != SQLITE_DONE){ NSLog(@"DB: query KO"); UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"ALERT" message:@"City not found" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alertView show]; return; } sqlite3_close(database);
Два вопроса:
1) для получения одной строки я должен использовать цикл while?
2) если в запросе нет результата, как предупредить «город не найден»
Ответ №1:
Очевидно, что вы получите последнюю строку,,
code
должен быть массив, который вы могли бы объявить так
NSMutableArray *code=[NSMutableArray array];
затем в цикле while используйте
[code addobject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]];
Я надеюсь, что это достаточно ясно:)
Ответ №2:
- Использование while дает вам последнюю строку, и она не нужна. Добавьте предложение limit 1 в свой запрос или просто возьмите первую возвращенную строку;
- Решите, показывать ли предупреждение, проверив код возврата.
Ответ №3:
Может быть, два ответа,
1) Нет, просто предложение «если» подойдет
2) Выполните уступку, а затем запустите на ней предложение if
int result = sqlite3_step(statement) if (result == SQLITE_ROW){ //processline } else{ //show alert }