Я создаю приложение для iOS, которое считывает данные из одной таблицы SQLITE с использованием переменных.У меня нет проблем с выполнением оператора SELECT, когда все переменные заполнены, но я хочу, чтобы в конечном итоге было большое количество переменных и позволяло пользователям пропускать те, которые они не считают для них значимыми.Другими словами, как я могу заставить это работать, даже когда переменные равны нулю или 0, такие как игнорирование этой части оператора select, но продолжение?Я пытался использовать операторы IF или CASE, но затем я получаю необъявленную ошибку.Я мог бы повторить весь getInitialDataToDisplay с IF, но должен быть более простой способ.
+ (void) getInitialDataToDisplay:(NSString *)dbPath{
int addOne = [[NSUserDefaults standardUserDefaults] integerForKey: @"criterion1key"];
int addTwo = [[NSUserDefaults standardUserDefaults] integerForKey: @"criterion2key"];
int addThree = [[NSUserDefaults standardUserDefaults] integerForKey: @"criterion3key"];
if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) {
NSString *querystring= [NSString stringWithFormat:@"select * from animalswhere description > %i and description < %i and cash >= %i",addOne, addTwo, addThree]; //WORKS FINE IF ALL VARIABLES HAVE VALUES, BUT DOES NOTHING IF VARIABLES ARE EMPTY
const char *sql = [querystring UTF8String];
sqlite3_stmt *selectstmt; if(sqlite3_prepare_v2(database, sql, -1,&selectstmt, NULL) == SQLITE_OK)
{
while(sqlite3_step(selectstmt) ==
SQLITE_ROW) {
NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
Animal *animal = [[Animal alloc] initWithPrimaryKey:primaryKey];
animal.name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)];
animal.description = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 4)];
animal.imageURL = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 5)];
animal.cash = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 32)];
[appDelegate.animals addObject:animal];
[animal release];
}
}
} else sqlite3_close(database);
}