SQLite всегда возвращает (null) для ТЕКСТОВОГО значения в iphone

#iphone #sqlite

#iPhone #sqlite

Вопрос:

Я пытаюсь восстановить данные из своей таблицы. Но он всегда возвращает (null). Вот мой код

     -(NSString *)filePath
{

    NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDir=[paths objectAtIndex:0];
    return [documentDir stringByAppendingPathComponent:@"database.sql"];

}

-(void)openDB
{
    //sqlite#_open
    if(sqlite3_open([[self filePath]UTF8String], amp;newDB)!=SQLITE_OK)
    {
        sqlite3_close(newDB);
        NSAssert(0,@"Database fialed to open");
    }
}

-(void)readAttendeesFormeetingId:(NSInteger)mId
{

    NSLog(@"readAttendeesFormeetingId==> %d",mId);

    sqlite3_stmt *stmtAgenda=nil; 

    attendeesArray = [[NSMutableArray alloc]init];
    SQLiteConnClass *objsqlite1=[[SQLiteConnClass alloc]init];
    newdb=[objsqlite1 openDB];

    if (stmtAgenda==nil) {

        const char *sql1 = "SELECT DISTINCT name FROM MeetingAttendees where meetingId= ? AND isPresent = 1";
        if (sqlite3_prepare_v2(newdb, sql1, -1, amp;stmtAgenda, NULL) != SQLITE_OK) {

            NSAssert1(0, @"Error: failed to prepare statement with message '%s'.", sqlite3_errmsg(newdb));
        }

    }

    sqlite3_bind_int(stmtAgenda, 1, mId);

    while(sqlite3_step(stmtAgenda) == SQLITE_ROW) {

        const char *agendaTitle=(const char *)sqlite3_column_text(stmtAgenda,4);

        NSString *stragendaTitle=agendaTitle == NULL ? nil:[[NSString alloc] initWithUTF8String:agendaTitle];


        //NSString *stragendaTitle = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(stmtAgenda, 4)];

        NSLog(@"agendaTitle %@",stragendaTitle);

        [attendeesArray addObject:stragendaTitle];

        [stragendaTitle release];                       
    }

    // Reset the statement for future reuse.
    sqlite3_reset(stmtAgenda);
    sqlite3_close(newDB);
}
  

Вот моя структура таблицы

введите описание изображения здесь

У меня есть значения имен в моей таблице. Ни одна строка не содержит нулевого значения. Тем не менее, я получаю нулевой результат.

Ответ №1:

Ваш оператор SELECT возвращает таблицу, содержащую только один столбец (столбец с отличным именем из MeetingAttendees), но ваш вызов sqlite3_column_text пытается прочитать из индекса столбца 4. Попробуйте изменить 4 на 0 и посмотрите, возвращает ли он нужные вам данные.

Комментарии:

1. Спасибо BP. Это работает отлично. Я подумал, что мы должны передать номер столбца из таблицы в sqlite3_column_text.

2. Нет проблем, рад помочь. Я бы рекомендовал использовать FMDB для вашего доступа к базе данных SQLite на iPhone, это простая в использовании и надежная оболочка Objective-C с открытым исходным кодом для SQLite. Вот ссылка: github.com/ccgus/fmdb