我在名为moveToPrevious()
的Cursor
上遇到了一种方法。
我之前读过article,建议实施C SQLite step command的向后版本很难/不可能:
...要求sqlite3_step_backward()按钮非常希望您的符号调试器能够向后运行或“撤消”其执行回到上一个断点。没有人合理地期望调试器能够做到这一点,所以你不应该期望SQLite能够sqlite3_step_backward()。
答案 0 :(得分:2)
Cursor接口提供对数据库查询返回的结果集的随机读写访问。不需要同步Cursor实现,因此使用Cursor时,使用来自多个线程的Cursor的代码应该执行自己的同步。
Cursor:使用Cursors从Android中的SQLite数据库中检索数据。 Android SQLite查询方法返回一个包含查询结果的Cursor对象.Cursors将查询结果记录存储在行中,并授予许多方法来访问和遍历记录。要使用游标,必须导入android.database.Cursor。
http://developer.android.com/reference/android/database/Cursor.html
检查来源
查看链接中的第248行
248 public final boolean moveToPrevious() {
249 return moveToPosition(mPos - 1);
// mPos looks like is the index here which is an int
250 }
moveToPosition
195 public final boolean moveToPosition(int position) {
196 // Make sure position is not past the end of the cursor
197 final int count = getCount();
198 if (position >= count) {
199 mPos = count;
200 return false;
201 }
202
203 // Make sure position isn't before the beginning of the cursor
204 if (position < 0) {
205 mPos = -1;
206 return false;
207 }
208
209 // Check for no-op moves, and skip the rest of the work for them
210 if (position == mPos) {
211 return true;
212 }
getCount()
返回行集中光标的当前位置。该值从零开始。首次返回行集时,光标将位于第一行之前的位置-1。返回最后一行后,再次调用next()会使光标超过最后一个条目,位于count()的位置。
返回: 当前光标位置。
答案 1 :(得分:2)
Android Cursor
类确实首先将所有结果记录读入内存,然后允许您随机单步执行它们。
(这就是为什么游标中的数据有1 MB的限制。)