sqlite получить один ряд - PullRequest
       3

sqlite получить один ряд

1 голос
/ 04 ноября 2011
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, &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) если в запросе нет результата как оповещение "город не найден"

Ответы [ 3 ]

1 голос
/ 05 ноября 2011

Очевидно, что вы получите последнюю строку ,,

code 

должен быть массивом, который вы могли бы объявить следующим образом

NSMutableArray *code=[NSMutableArray array];

, тогда в цикле while используйте

[code addobject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)]];

Надеюсь, это достаточно ясно:)

0 голосов
/ 04 ноября 2011

Возможно два ответа,

1) Нет, просто предложение if выполнит

2) Выполните задание, а затем выполните предложение if для него

   int result = sqlite3_step(statement)
    if (result == SQLITE_ROW){
        //processline
    }
    else{
        //show alert
    }
0 голосов
/ 04 ноября 2011
  1. Использование while дает вам последний ряд, и он не нужен.Добавьте к вашему запросу предложение limit 1 или просто возьмите первую возвращенную строку;
  2. Решите, показывать ли предупреждение, проверяя код возврата.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...