#iphone #objective-c #cocoa-touch #ios #sqlite
#iPhone #objective-c #cocoa-touch #iOS #sqlite
Вопрос:
У меня есть база данных SQLite, и когда я пытаюсь получить данные из базы данных, я повторно получаю последний вставленный элемент. Как я могу получить все элементы без повторения.
Код, который я написал:
- (NSMutableArray *) gettingData {
sqlDict = [[NSMutableDictionary alloc] init];
membersInfoArray =[[NSMutableArray alloc]init ];
[self checkAndCreateDatabase];
if (sqlite3_open([databasePath UTF8String], amp;database) == SQLITE_OK)
{
const char *sql = "select * from ProductList";
sqlite3_stmt *selectstmt;
if(sqlite3_prepare_v2(database, sql, -1, amp;selectstmt, NULL) == SQLITE_OK)
{
while(sqlite3_step(selectstmt) == SQLITE_ROW)
{
NSString *prdbcode = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 0)];
[sqlDict setObject:prdbcode forKey:@"Barcode"];
[prdbcode release];
NSString *prdname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
[sqlDict setObject:prdname forKey:@"ProductName"];
[prdname release];
NSString *prdDesc = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 2)];
[sqlDict setObject:prdDesc forKey:@"ProductDescription"];
[prdDesc release];
NSString *prdstatus = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 3)];
[sqlDict setObject:prdstatus forKey:@"ProductStatus"];
[prdstatus release];
[membersInfoArray addObject:sqlDict];
[sqlDict release];
}
}
sqlite3_finalize(selectstmt);
}
sqlite3_close(database);
return membersInfoArray;
}
Я извлекаю данные следующим образом:
NSMutableArray *sqlArray = [sqlViewController gettingData];
Спасибо.
Комментарии:
1. @Prabah В приведенном выше методе нет ничего плохого. Как вы получаете доступ к значениям? Не могли бы вы, пожалуйста, опубликовать и этот код?
2. хорошо, какой код?? вставка данных отсутствует?
3. @Prabah Вы, должно быть, выполняете итерацию возвращаемого массива. Этот код.
4. NSMutableArray *sqlArray = [Получение данных sqlViewController];
5. @Prabah попробуйте очистить сборку из приложения и удалить ваше приложение из симулятора и повторно запустить. В приведенном выше коде, который вы пишете, нет ничего плохого. И этого не должно быть, все равно откройте базу данных из установленного местоположения и проверьте записи.
Ответ №1:
Просто объявите свой массив глобально, а не объявляйте локально в вашем методе. Ваша проблема будет решена.