【发布时间】:2011-12-13 21:53:29
【问题描述】:
我的应用在 .sqlite 文件中有 3,000 个考试题。这些问题是根据用户的需求动态选择和排序的(例如,'按错误答案计数','只选择未访问的问题')。
每当用户进行选择时,app 都会执行相应的 SQL 语句,并通过使用 sqlite3,将所有结果集发送到 NSMutableArray(Question 类)。但正如您将注意到的,这是一个耗时的过程(大约 2~3 秒,并且 UI 在此过程中停止响应)。
所以我想创建一个具有 rowCount() 和 moveToRow(int index) 方法的“光标”类。
有了这个,我的想法是
Cursor c = [[Cursor alloc] init] query(
"SELECT id,qtext,answer,a1,a2,... FROM TABLE WHERE id > 100"
)];
// at this time, just a cursor is given, no need to iterate all the retrieved rows
for (i=0; i > c.rowCount(); i++) {
c.moveToRow(i);
ShowQuestionDetail(c);
}
像这样。
我知道 CoreData 适合这个目的,但我需要与这个应用程序的 android 版本共享 .sqlite 文件。 CoreData 要求所有表名和字段名都以 Z_ 前缀开头,但我无法修改 .sqlite 文件的方案。另外我需要使用 sqlcipher,CoreData 不能与 sqlcipher 一起使用。
FMDB 不支持提供检索行计数并移动到特定行的方法。
是否还有其他支持此功能的 SQLite 包装库?
有人建议制作一个“目录”数组,其中只包含检索到的行的 id,并在每次调用 moveToRow() 时获取行。我同意这是一个不错的选择,但我想找到另一种方法。
【问题讨论】:
标签: iphone sqlite uitableview fmdb