2011-12-29 3 views
0

Как получить, скажем, товар с 7 000 до 7 999 в моей таблице SQLite с примерно 100 000 позиций?Как получить набор элементов из базы данных

Нормальная выборка возвращается к много работать, и я скорее принесу понемногу:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
NSEntityDescription *entity = [NSEntityDescription 
           entityForName:@"Log" 
         inManagedObjectContext:context]; 
[fetchRequest setEntity:entity]; 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&err]; 
// here fetchedObjects holds around 100 000 rows 
  • Есть ли способ, чтобы определить диапазон с в executeFetchRequest:fetchRequest?
  • Должен ли я использовать SQLite API?
  • Это хорошая идея?

ответ

2

Используйте fetchLimit и fetchOffset свойства на NSFetchRequest для извлечения объекта в выбранном диапазоне.

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 
fetchRequest.fetchLimit = 1000; 
fetchRequest.fetchOffset = 7000; 
NSEntityDescription *entity = [NSEntityDescription 
           entityForName:@"Log" 
         inManagedObjectContext:context]; 
[fetchRequest setEntity:entity]; 
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&err]; 
+0

Удивительно, безопасно ли это? На самом деле другой вопрос, но есть ли риск, что порядок может измениться? Скажем, я получаю объекты 7 000 - 7 999 один день, а объект 8 000 - 8 999 другой, когда количество объектов удвоилось. (Я только добавляю, никогда не удаляю.) Затем мне нужно, чтобы номер 8 000 был объектом, который однажды был добавлен сразу после номера 7 999. – JOG

+0

Это полностью зависит от ваших критериев выборки. Используете ли вы предикат для фильтрации результатов? Как вы сортируете? Все это зависит от потребностей ваших приложений. Что касается безопасности, я не думаю, что это был бы открытый API, если бы он был небезопасным ... –

+0

Нет фильтра, без сортировки. Я мог бы разобраться, но я думаю, это был вопрос. Так что спасибо! Я попробую это. – JOG

Смежные вопросы