Мой проект iPhone не выбирает более 5 строк таблицы sqlite? - PullRequest
0 голосов
/ 06 октября 2011

Когда я пытаюсь получить данные из таблицы базы данных sqlite, NSArray имеет емкость 100, а массив count имеет емкость 9. count [5] возвращает мне мусорные данные, которых вообще нет в таблице,Даже первые 5 записей вернулись правильно.

    if(sqlite3_open([dbPath UTF8String],&database)==SQLITE_OK){

        const char* sql2= " select * from Bcars";

        sqlite3_stmt *selectstatment;

        if(sqlite3_prepare_v2(database,sql2,-1,&selectstatment,Nil)==SQLITE_OK){

            while(sqlite3_step(selectstatment)==SQLITE_ROW){
                // fetch the id


                 count[i++]=sqlite3_column_int(selectstatment, 0);

                 carobject.primarykey=sqlite3_column_int(selectstatment, 0);


                [ar addObject:[NSString stringWithUTF8String:(char*)sqlite3_column_text(selectstatment, 1)]];
                [ar1 addObject:[NSString stringWithUTF8String:(char*)sqlite3_column_text(selectstatment, 2)]];


            } 
        }

    }
    else 
    {

    sqlite3_close(database);
        self.statustext.text=@" database closed";
    }

self.statustext.text=[[NSString alloc]initWithFormat:@"%d",count[4]];/* when I try to return count[5] it gives me rabbish value !!*/

    self.searchtext.text=(NSString*)[ar objectAtIndex:5];//here is an error occurred !!

1 Ответ

1 голос
/ 06 октября 2011

Есть несколько проблем с вашим кодом:

  • Вы не инициализировали счетчик i, поэтому я предполагаю, что он был инициализирован вне фрагмента, или?
  • Как вы узнаете, сколько данных фактически доступно в базе данных?Массив count должен быть достаточно большим, чтобы вместить все строки, иначе вы перезапишете часть нераспределенной памяти.Может быть, вы знаете это заранее, или же вы должны выяснить это, например, выполнив какой-либо оператор SQL aka "SELECT COUNT(*) FROM Bcars".
  • Вы абсолютно уверены, что база данных содержит более 5 записей?Код просто предполагает это, но не проверяет значение i или [ar count], действительно ли вы получили эти записи?
  • Убедитесь, что вы выполнили очистку после выполнения, вызвав sqlite3_finalize()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...