开发者

How to call different tables in an "if and else" part of the same database in iPhone?

I have a database. It has two tables in it. I want to call one table in an if condition. How do I call the second table in the else part if the if conditions fail?

This is the code I used:

{
    NSArray *Paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *Documen开发者_JAVA技巧tsDirectory = [Paths objectAtIndex:0];
    NSString *Path = [DocumentsDirectory stringByAppendingPathComponent:@"StoreList.sqlite"];

    // Open the database from the users filessytem.
    if (sqlite3_open([Path UTF8String], &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, &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], &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, &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);
        }
    }

I'm getting the input from the text box. When I give the correct value, which is there in the database, it is working fine, the fetch of the data is correct. If I give the wrong data in the textbox it's not working fine - the else condition fails.

How can this issue be fixed?


When going on else you open the same database again, that's not needed (and might cause some problems as well, haven't tried it). Use a BOOL when running the first (select) statement and set it to YES or NO if it fails or not. After you finish with the first statement check the BOOL value and if ==NO run the second statement.

    ...
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, &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, &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);
}

I haven't run it, so it might contain some bugs.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜