#objective-c
#objective-c
Вопрос:
У меня есть база данных. В нем есть две таблицы. Я хочу вызвать одну таблицу в if
условии. Как мне вызвать вторую таблицу в else
части, если if
условия не выполняются?
Это код, который я использовал:
{
NSArray *Paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *DocumentsDirectory = [Paths objectAtIndex:0];
NSString *Path = [DocumentsDirectory stringByAppendingPathComponent:@"StoreList.sqlite"];
// Open the database from the users filessytem.
if (sqlite3_open([Path UTF8String], amp;database) == SQLITE_OK) {
// Setup the SQL Statement and compile it for faster access
//*********const char *sqlStatement = "select * from Store where Zipcode ='%@'",inputTxt ;
NSString *sqlStatement = [NSString stringWithFormat:@"select * from Store where Zipcode ='%@' or Address = '%@' or CityName = '%@'",inputTxt, inputTxt, inputTxt];
NSLog(@" Query in if :%@",sqlStatement);
sqlite3_stmt *compiledStatement;
if (sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, amp;compiledStatement, NULL) == SQLITE_OK) {
// Loop through the results and add them to the feeds array.
if(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Read the data from the result row
NSString *latValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
NSLog(@"Latitude:%@",latValue);
NSString *longValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
NSLog(@"Longitude:%@",longValue);
//currentLocationLbl.text=[NSString stringWithFormat:@" %@ , %@" ,latValue,longValue];
// delegate.latitudeVal=latValue;
// delegate.longitudeVal=longValue;
txtChangeLocation.text = @"";
isFromChangeLoc=TRUE;
//self.tabBarController.selectedIndex=3;
}
else {
NSLog(@"ELSE PART");
// Open the database from the user's filessytem.
if (sqlite3_open([Path UTF8String], amp;database) == SQLITE_OK) {
// Setup the SQL Statement and compile it for faster access
//*********const char *sqlStatement = "select * from Store where Zipcode ='%@'",inputTxt ;
NSString *sqlStatement = [NSString stringWithFormat:@"select * from zipcodes where zip ='35004'"];
NSLog(@" Query in if :%@",sqlStatement);
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, amp;compiledStatement, NULL) == SQLITE_OK) {
// Loop through the results and add them to the feeds array
if(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Read the data from the result row
NSString *latValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
NSLog(@"Latitude:%@",latValue);
NSString *longValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
NSLog(@"Longitude:%@",longValue);
//currentLocationLbl.text=[NSString stringWithFormat:@" %@ , %@" ,latValue,longValue];
// delegate.latitudeVal=latValue;
// delegate.longitudeVal=longValue;
txtChangeLocation.text = @"";
isFromChangeLoc=TRUE;
}
}
}
}
sqlite3_finalize(compiledStatement);
sqlite3_close(database);
}
}
Я получаю входные данные из текстового поля. Когда я даю правильное значение, которое есть в базе данных, оно работает нормально, выборка данных выполняется правильно. Если я ввожу неправильные данные в текстовое поле, это работает неправильно — else
условие не выполняется.
Как можно устранить эту проблему?
Ответ №1:
При продолжении else
вы снова открываете ту же базу данных, в этом нет необходимости (и это также может вызвать некоторые проблемы, не пробовал). Используйте BOOL
при выполнении первого оператора (select) и установите для него значение YES
or NO
, если он завершается с ошибкой или нет. После завершения выполнения первого оператора проверьте BOOL
значение и, если ==NO
, запустите второй оператор.
...
BOOL success = NO;
NSString *sqlStatement = [NSString stringWithFormat:@"select * from Store where Zipcode '%@' or Address = '%@' or CityName = '%@'",inputTxt, inputTxt, inputTxt];
NSLog(@" Query in if :%@",sqlStatement);
sqlite3_stmt *compiledStatement;
if(sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, amp;compiledStatement, NULL) == SQLITE_OK){
if(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Read the data from the result row
NSString *latValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
NSLog(@"Latitude:%@",latValue);
NSString *longValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
NSLog(@"Longitude:%@",longValue);
//currentLocationLbl.text=[NSString stringWithFormat:@" %@ , %@" ,latValue,longValue];
// delegate.latitudeVal=latValue;
// delegate.longitudeVal=longValue;
txtChangeLocation.text = @"";
isFromChangeLoc=TRUE;
//self.tabBarController.selectedIndex=3;
success=YES;
}
}
sqlite3_finalize(compiledStatement);
if(success){
//do the else from your code
NSString *sqlStatement = [NSString stringWithFormat:@"select * from zipcodes where zip ='35004'"];
NSLog(@" Query in if :%@",sqlStatement);
if(sqlite3_prepare_v2(database, [sqlStatement UTF8String], -1, amp;compiledStatement, NULL) == SQLITE_OK){
// Loop through the results and add them to the feeds array
if(sqlite3_step(compiledStatement) == SQLITE_ROW) {
// Read the data from the result row
NSString *latValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)];
NSLog(@"Latitude:%@",latValue);
NSString *longValue = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 3)];
NSLog(@"Longitude:%@",longValue);
//currentLocationLbl.text=[NSString stringWithFormat:@" %@ , %@" ,latValue,longValue];
// delegate.latitudeVal=latValue;
// delegate.longitudeVal=longValue;
txtChangeLocation.text = @"";
isFromChangeLoc=TRUE;
}
}
sqlite3_finalize(compiledStatement);
}
Я не запускал его, поэтому он может содержать некоторые ошибки.