Получение ошибки при выполнении команды SQLite из приложения - PullRequest
0 голосов
/ 13 сентября 2011

В моем приложении есть простая функция:

-(NSMutableArray *)SelectProductID:(NSMutableArray *)arr
{
    NSLog(@"----------------");

    sqlite3_stmt *statement;

    NSMutableArray *arrPordID = [[NSMutableArray alloc]init];

    @try
    {

        //Get productID
        for(NSString *strSubProductID in arr)
        {


            NSString *s = [NSString stringWithFormat:@"SELECT ProductID FROM SubProducttable where SubProductID=%@",strSubProductID];

            const char *sql = [s cStringUsingEncoding:NSASCIIStringEncoding];

            if (sqlite3_prepare_v2(database, [s cStringUsingEncoding:NSUTF8StringEncoding], -1, &statement, NULL) == SQLITE_OK) {

                while (sqlite3_step(statement) == SQLITE_ROW){

                    char *dbString;

                    dbString = (char *)sqlite3_column_text(statement, 0);
                    NSString *pID = (dbString) ? [NSString stringWithUTF8String:dbString] : @"";
                    [arrPordID addObject:pID];

                }

            }             

        }
    }
    @catch (NSException *exception) {

        @throw exception;
    }
    @finally {

        sqlite3_finalize(statement);
    }
    return arrPordID;

}

Я столкнулся со странной проблемой здесь. Когда приложение достигает while (sqlite3_step(statement) == SQLITE_ROW){, цикл никогда не вводится. Я не знаю почему. Я выполнил тот же запрос в диспетчере SQLite (когда приложение не запущено). И я получаю результат как один. В результате я получаю 2 . Но здесь я ничего не получаю.

И да, я всегда закрываю базу данных в диспетчере SQLite всякий раз, когда запускаю свое приложение. Я также очистил приложение, перезапустил XCode и удалил приложение из симулятора. Но безуспешно.

Также я видел странную вещь во время отладки. Во время отладки sqlite3_stmt *statement всегда пропускается. Это причина, по которой я не получаю никакого результата?

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

Вы пробовали subproductId в одинарных кавычках?

NSString *s = [NSString stringWithFormat:@"SELECT ProductID FROM SubProducttable where SubProductID='%@'",strSubProductID];
0 голосов
/ 13 сентября 2011
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {
    // Setup the SQL Statement and compile it for faster access
    const char *sqlQuery = @"SELECT ProductID FROM SubProducttable where SubProductID=%@",strSubProductID;
    sqlite3_stmt *statement;
    if(sqlite3_prepare_v2(database, statement, -1, &sqlQuery, NULL) == SQLITE_OK) {
        while(sqlite3_step(sqlQuery ) == SQLITE_ROW) {
            // Read the data and add to your array object
        }
    }
    // Release the compiled statement from memory
    sqlite3_finalize(statement);

}
sqlite3_close(database)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...