SQLite для объекта NSMutableArray - PullRequest
0 голосов
/ 05 августа 2010

Я новичок в Objectiv-C, и я пытаюсь заставить свою базу данных SQLite работать, но я получаю сомнение, я могу получить помощь Соммена здесь.

То, что у меня будет мой код, связывает все «region_title» с таблицей, а «region_id» с идентификатором, таким как «html», когда вы используете «options»

Я пытаюсь найти информацию об этом, но я не могу найти помощь в своей проблеме, я могу помочь здесь.

скажем, если вам нужно больше примеров кода от меня, вы можете перекодировать этот код, если считаете, что он лучше, сейчас мне действительно нужно попробовать это и заставить его работать. : 0)

много танков за любую помощь от всех.

   const char *sql = "SELECT region_id, region_title FROM region";
    sqlite3_stmt *statement;

    if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) 
    {
        while (sqlite3_step(statement) == SQLITE_ROW) 
        {
            NSString *aRegionId = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)] autorelease];
            NSString *aRegionTitle = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)] autorelease];

            MapClass *mapclass = [[MapClass alloc] initWithName:aRegionTitle region_id:aRegionId];
            [todoArray addObject:mapclass];

        }

        self.listData = todoArray;
    }

Хорошо работает, если я использую это

            NSString *rowData = [NSString stringWithUTF8String: sqlite3_column_text(statement, 0)];
            NSString *RegionTitle = [NSString stringWithUTF8String: sqlite3_column_text(statement, 1)];

            [mapArray addObject:rowData];
            NSLog(@"rowData: %@", rowData); 

Теперь мне нужно только получить RegionTitle для текста метки, так что мой идентификатор не является текстом метки, а моя работа выполнена :), можете ли вы помочь с этим?

Ответы [ 3 ]

0 голосов
/ 05 августа 2010

Поскольку я не вижу ни сообщения об ошибке, ни более подробной информации о том, что не так (или структура вашей базы данных), я думаю, что ваш запрос является проблемой.Каковы типы данных region_id и region_table?Я предположил int и 'string'.

, предполагая, что это работает:

NSString *query = [NSString stringWithFormat:@"select id, tableview from region"];

, затем попробуйте это:

NSString *query = [NSString stringWithFormat:@"select `%i`, `%@` from `region`", region_id, region_table]; // assuming region_id is int and region_table is a string of some sort...

if (sqlite3_prepare_v2(database, [query UTF8String], -1, &statement, NULL) == SQLITE_OK) 
    {
        while (sqlite3_step(statement) == SQLITE_ROW) 
        {
            NSString *aRegionId = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 0)];
            NSString *aRegionTitle = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];

            MapClass *mapclass = [[MapClass alloc] initWithName:aRegionTitle region_id:aRegionId];
            [todoArray addObject:mapclass];

        }

        self.listData = todoArray;
    }

Обратите внимание, что я изменил ваш запрос на NSString... ваш выбор (не нужно выпускать, как уже было сказано выше), но при этом вы должны преобразовать его в UTF8 в этой строке:

if (sqlite3_prepare_v2 (database, [queryUTF8String] , -1, & Statement, NULL) == SQLITE_OK)

конечно, вы не перехватывает NULL в своем выражении, поэтому вы можете добавить ", где %@ равноне равно нулю"в вашем запросе ...

0 голосов
/ 10 мая 2011

объявить в. ч файл MSMutableArray * todoArray;

использовать в .m файле

sqlite3 *database;

NSString *fakePassword ;

NSString *originalPassword;

if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) 
{   
    sqlStatement = [NSString stringWithFormat:@"SELECT * FROM password"];

    sqlite3_stmt *compiledStatement;

    if(sqlite3_prepare_v2(database, [sqlStatementcStringUsingEncoding:NSUTF8StringEncoding], -1, &compiledStatement, NULL) == SQLITE_OK) 
    {           
        NSLog(@"%@",sqlStatement);

        while (sqlite3_step(compiledStatement) == SQLITE_ROW) 
        {
            fakePassword = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)] retain];
            originalPassword = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 2)] retain];
        }

            [todoArray addObject:fakePassword];

        sqlite3_finalize(compiledStatement);
    }       
}

}

0 голосов
/ 05 августа 2010

Вам следует удалить сообщения autorelease, поскольку [NSString stringWith...] уже возвращает автоматически освобожденные строки. Кроме того, нумерация начинается с 0.

NSString *aRegionId = [NSString stringWithUTF8String:
                                    (char *)sqlite3_column_text(statement, 0)];
NSString *aRegionTitle = [NSString stringWithUTF8String:
                                    (char *)sqlite3_column_text(statement, 1)];

должно работать.

(и, строго говоря, должен автоматически выпустить объект MapClass!)

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